管道 find -name 到 xargs 导致文件名没有传递给命令的空格

Ash*_*ley 32 command-line rm find xargs

通常要删除文件名中带有空格的文件,您必须运行:

$ rm "file name"
Run Code Online (Sandbox Code Playgroud)

但如果我想删除多个文件,例如:

$ find . -name "*.txt" | xargs rm
Run Code Online (Sandbox Code Playgroud)

这不会删除其中包含空格的文件。

ste*_*ver 51

你可以告诉findxargs都使用空终止符

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

或(更简单)使用内置-delete动作find

find . -name "*.txt" -delete
Run Code Online (Sandbox Code Playgroud)

或(感谢@kos)

find . -name "*.txt" -exec rm {} +
Run Code Online (Sandbox Code Playgroud)

其中任何一个都应该尊重系统的ARG_MAX限制而不需要xargs.

  • 大师如此说:永远记住 xargs -0。 (3认同)