对目录树中的每个文件运行命令的最佳方法

Bri*_*tle 14 command-line scripting directory find

似乎有很多方法可以做到这一点,包括 shell 脚本中的循环、find 和 xargs。其中哪个最好,哪个最便携?

txw*_*ger 13

find . -exec <command> {} \;
Run Code Online (Sandbox Code Playgroud)

对于当前目录作为树的根或一般:

find <directory> -exec <command> {} \;
Run Code Online (Sandbox Code Playgroud)

  • 在某些系统上 find 没有 -exec 选项,您可以使用 find 。| xargs &lt;命令&gt; (4认同)
  • 确实,如果您需要按某些内容进行过滤,请尝试对目录使用 `-name "*.c"` 或例如 `-type d`... (4认同)

小智 5

如果文件名或目录名带有空格,请使用-print0查找选项和-0选项xargs

find {dir} -print0 | xargs -0r {command}
Run Code Online (Sandbox Code Playgroud)

-print0选项发现打印出的文件名作为NUL-分隔,而不是空格隔开的列表,而-0选项xargs指示它打破其输入NUL,而不是空白。由于NUL是 Unix 文件名中不允许使用的字符之一,因此无法将其误认为是文件名的一部分。

-r选项在那里,因此xargs如果没有输入,则不会给您错误。