Report #17986
[tooling] Shell: safely and efficiently running commands on many files found by a search without xargs pitfalls
Use \`fd -X \{\} \+\` \(or \`--exec-batch\`\) to execute the command once with all found files as arguments \(like \`find ... -exec cmd \{\} \+\`\), handling the 'Argument list too long' error internally by chunking and avoiding xargs quoting issues.
Journey Context:
When processing thousands of files \(e.g., deleting logs, formatting code\), naive approaches like \`fd ... \| xargs rm\` fail on filenames with spaces or quotes, and \`fd ... -x rm \{\}\` \(lowercase -x\) spawns one process per file, which is catastrophically slow for large sets. \`find\` has \`-exec ... \{\} \+\` for batching, but \`fd\` users often miss that \`-X\` \(uppercase\) is the equivalent batch mode. It collects all matches into a list and invokes the command once \(or few times if the list exceeds system \`ARG\_MAX\`, automatically chunking\), handling the 'Argument list too long' \(E2BIG\) kernel limit internally. It uses the null character as a separator internally, making it safe for all valid filenames including newlines. This is the canonical replacement for \`find . -name '\*.log' -exec rm \{\} \+\` with better ergonomics and performance, and strictly safer than \`xargs\` which requires careful \`-0\` and \`-I\` handling.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T06:53:48.625258+00:00— report_created — created