obliterate command permanently deletes the underlying blob storage for every version of files that match a path pattern, across all branches and commits. This is destructive and irreversible.
For background, glob syntax, and the underlying model, see the Obliterate guide.
Requirements:
- You must be an organization admin.
- Obliterate is not supported on git-synced repositories.
preview
Show what would be obliterated. No state changes.<glob> is a path pattern anchored to the repo root (e.g. '/assets/*.psd'). Quote the pattern so your shell does not expand it. The argument is repeatable — pass multiple globs to plan their combined obliteration in one call.
--json emits a single JSON document on stdout with the full preview response. Banners and warnings are suppressed in this mode; warnings move into a warning string field on the document.
The human view shows headline counts, a reclaim estimate, and the top 20 deletable / not-deleted paths sorted by bytes desc. If the full list is longer, a trailing line reads ... and N more (use --json for the full list). When more than one glob is passed, a per-glob block prints the files / versions / total bytes each glob matched on its own.
Example:
execute
Permanently obliterate matching blobs.<glob> is the same path pattern as in preview, and is repeatable.
--yes skips the destructive-confirmation prompt (for scripting). Without it, you must type the repository name or ID at the prompt to confirm.
--json emits a single JSON document instead of the human banner. Requires --yes — an interactive prompt would corrupt the JSON stream.
--nowait enqueues the job and exits immediately without polling. Use dv obliterate status <job_id> afterwards.
By default, execute returns a job_id and polls the status endpoint every 3 seconds for up to 18 seconds. The cap is fixed — use --nowait to skip polling, or follow up with status for longer runs.
Exit codes:
Example:
status
Show the state of a previously enqueued obliterate job.<job_id> is the id returned by dv obliterate execute (e.g. dv.obliterate.593d2b8a8dbf47559bcc73c8bcf54f41).
Output includes the overall status (queued, in_progress, succeeded, failed, or archived), per-file counts (pending / done / failed), the start time, and — for terminal states — the end time. failed includes the first 20 errors with a short error message per failure. archived means the job has aged out of the queue but its counts are still inspectable.
A 404 means there is no obliterate job with that id in this repository.
Example:
Notes
- The server enforces a 60-second time budget on glob resolution. If your glob matches too many files, the call is rejected with an error — narrow the pattern and split into multiple runs.
- The actual deletion runs in the background after the call returns, which is why
executereturns quickly and why progress is tracked via the status endpoint. - Files in shared (grouped) storage cannot be individually obliterated and are reported as skipped in the response.

