Question

I'm trying to write a bash command that will delete all files matching a specific pattern - in this case, it's all of the old vmware log files that have built up.

I've tried this command:

find . -name vmware-*.log | xargs rm

However, when I run the command, it chokes up on all of the folders that have spaces in their names. Is there a way to format the file path so that xargs passes it to rm quoted or properly escaped?

Was it helpful?

Solution

Try using:

find . -name vmware-*.log -print0 | xargs -0 rm

This causes find to output a null character after each filename and tells xargs to break up names based on null characters instead of whitespace or other tokens.

OTHER TIPS

Do not use xargs. Find can do it without any help:

find . -name "vmware-*.log" -exec rm '{}' \;

Check out the -0 flag for xargs; combined with find's -print0 you should be set.

find . -name vmware-*.log -print0 | xargs -0 rm

GNU find

find . -name vmware-*.log -delete

find . -name vmware-*.log | xargs -i rm -rf {}

find -iname pattern

use -iname for pattern search

To avoid space issue in xargs I'd use new line character as separator with -d option:

find . -name vmware-*.log | xargs -d '\n' rm
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top