我正在尝试编写一个bash命令,用于删除所有与特定模式匹配的文件 - 在这种情况下,它是所有已经积累的旧vmware日志文件。
我尝试了这个命令:
find . -name vmware-*.log | xargs rm
然而,当我运行这个命令时,它在所有包含空格的文件夹上都出现了问题。是否有一种方法可以格式化文件路径,以便xargs将其作为带引号或正确转义的参数传递给rm?
我正在尝试编写一个bash命令,用于删除所有与特定模式匹配的文件 - 在这种情况下,它是所有已经积累的旧vmware日志文件。
我尝试了这个命令:
find . -name vmware-*.log | xargs rm
然而,当我运行这个命令时,它在所有包含空格的文件夹上都出现了问题。是否有一种方法可以格式化文件路径,以便xargs将其作为带引号或正确转义的参数传递给rm?
尝试使用:
find . -name vmware-*.log -print0 | xargs -0 rm
这使得 find
在每个文件名后输出一个 null 字符,并告诉 xargs
基于 null 字符而不是空格或其他分隔符来拆分名称。
find . -name "vmware-*.log" -exec rm '{}' \;
find
甚至有一个delete
操作可用于代替-exec ...
,但以这种方式进行自定义更容易。除非您使用像tcsh这样的旧shell,否则不必引用花括号。 - Cascabelrm
进程,而不像xargs
那样将多个文件名传递给rm
,因此速度会更慢。 - JaakkoKfind
实现会有find -exec rm '{}' +
这种用法,它会像xargs
一样批量处理参数。 - ephemient查看xargs
的-0
标志;结合find
的-print0
,您就可以设置了。
find . -name vmware-*.log -print0 | xargs -0 rm
GNU find
find . -name vmware-*.log -delete
find . -name vmware-*.log | xargs -i rm -rf {}
查找 . 目录下所有以 vmware- 开头,以 .log 结尾的文件,并将其删除。
find . -name vmware-*.log | xargs -d '\n' rm
find -iname pattern
使用-iname
进行模式搜索