开发者

Shell Scripting: Using bash with xargs

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 s开发者_JAVA技巧o that xargs passes it to rm quoted or properly escaped?


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.


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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜