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

Dan*_*ego 11 bash shell find xargs

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

我试过这个命令:

find . -name vmware-*.log | xargs rm
Run Code Online (Sandbox Code Playgroud)

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

Emi*_*Sit 24

尝试使用:

find . -name vmware-*.log -print0 | xargs -0 rm
Run Code Online (Sandbox Code Playgroud)

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


L.R*_*.R. 9

不要使用xargs.找不到任何帮助可以做到:

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

  • @jk:这就是为什么更新的`find`实现有`find -exec rm'{}'+`,它会像`xargs`一样批处理参数. (5认同)
  • 避免开始额外的过程总是好的,尤其是这样的事情,你可以为xargs提供太长的时间.请注意,`find`甚至可以使用`delete`动作而不是`-exec ...` - 但是这样更容易定制.你也不必引用花括号,除非你使用像tcsh这样的旧shell. (3认同)
  • 但是这将分别为每个文件启动一个`rm`进程,而不是像`xargs`那样将几个文件名传递给`rm`,所以它会变慢. (3认同)

Car*_*rum 5

查看-0标志xargs; 结合find-print0你应该设置.

find . -name vmware-*.log -print0 | xargs -0 rm
Run Code Online (Sandbox Code Playgroud)