Shell脚本:将bash与xargs一起使用

时间:2009-10-19 18:26:56

标签: bash shell find xargs

我正在尝试编写一个bash命令来删除与特定模式匹配的所有文件 - 在这种情况下,它是所有已构建的旧vmware日志文件。

我试过这个命令:

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

但是,当我运行该命令时,它会阻塞名称中包含空格的所有文件夹。有没有办法格式化文件路径,以便xargs将其传递给rm引用或正确转义?

7 个答案:

答案 0 :(得分:24)

尝试使用:

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

这会导致find在每个文件名后输出一个空字符,并告诉xargs根据空字符而不是空格或其他标记来分解名称。

答案 1 :(得分:9)

不要使用xargs。查找可以在没有任何帮助的情况下完成:

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

答案 2 :(得分:5)

查看-0的{​​{1}}标记;结合xargs的{​​{1}}你应该设置。

find

答案 3 :(得分:4)

GNU find

find . -name vmware-*.log -delete

答案 4 :(得分:1)

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

答案 5 :(得分:0)

find -iname pattern

使用-iname进行模式搜索

答案 6 :(得分:0)

为了避免xargs中出现空间问题,我使用新行字符作为带-d选项的分隔符:

find . -name vmware-*.log | xargs -d '\n' rm