4 ms·
> Or maybe you pipe into xargs and pray your filenames don’t have spaces: > find . -name '*.log' | xargs rm No need for prayer: find . -name '*.log' -pri
by tom_alexander 3mo ago
> Or maybe you pipe into xargs and pray your filenames don’t have spaces:
> find . -name '*.log' | xargs rm
No need for prayer:
find . -name '*.log' -print0 | xargs --null rm
That uses null as a delimiter instead of linebreaks.
- ninkendo 3mo agoRelated: I wish there were a portable way for xargs to treat newlines as delimeters but not other spaces. Since 99.9% of the time that's what you want. (GNU's has this with -d/--delimiter, but BSD's, and thus macOS's, doesn't.) --null/-0 is portable and helps, but it means the input has to be NUL-delimited, which is... rare. Sure, find has -print0 but (a) I wish I didn't need to do that, and (b) sometimes it's nice to just pipe `ls` output into xargs, without a `... | while read i; do echo -ne "${i}\0"; done | ...` kludge in the pipeline. Because spaces in filenames is just common enough to be something that will bite you eventually, but newlines in filenames are a straight evil that you can basically always say is the filename's fault.