Skip to content
Latchkey

xargs to Delete Many Files Safely

Piping find into xargs rm deletes many files in batches that stay under the OS argument limit.

Cleaning up build artifacts or caches in CI often means deleting thousands of files. xargs batches the deletions so rm never overflows its argument list.

What it does

find lists the files to remove and xargs groups them into as many rm invocations as needed to stay under the argument-length limit. The safe form is find -print0 piped to xargs -0 -r rm, which handles odd filenames and skips running rm when nothing matched.

Common usage

Terminal
# safe bulk delete
find /tmp/build -type f -print0 | xargs -0 -r rm -f
# delete in parallel for huge trees
find . -name '*.o' -print0 | xargs -0 -r -P 4 -n 500 rm -f
# alternative: find -delete (no xargs needed)
find /tmp/build -type f -delete

Options

FlagWhat it does
-0 (with -print0)Handle spaces and newlines in paths
-rSkip rm entirely if no files matched
rm -fIgnore missing files and never prompt
-P / -nParallelize and batch very large deletions
find -deleteBuilt-in alternative that avoids xargs

In CI

For pure deletion, find -delete is simpler and avoids the whitespace trap entirely. Reach for xargs when you need rm flags, parallelism, or a command other than rm. Always include -0 and -r so a path with spaces or an empty match set cannot cause damage.

Common errors in CI

Plain "find ... | xargs rm" on a path with spaces gives "rm: cannot remove 'my': No such file or directory". Without -r, an empty result runs "rm" with no operands and prints "rm: missing operand". Extremely long single arguments still trigger "argument line too long"; let xargs batch rather than building one giant rm.

Related guides

Run this faster and cheaper on Latchkey managed runners. Start free →