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

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

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

答案1

find . -exec <command> {} \;

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

find <directory> -exec <command> {} \;

答案2

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

find {dir} -print0 | xargs -0r {command}

find选项-print0将文件名打印为NUL- 分隔的列表,而不是空格分隔的列表,而-0选项 则指示它以空格而不是空格xargs来中断输入。NUL由于NUL是 Unix 文件名中不允许使用的字符之一,因此不可能将其误认为是文件名的一部分。

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

答案3

如果可移植性是一个问题,我会远离特定于 shell 的方法(有很多人使用许多不同的 shell,但一般来说 find 和 xargs 都是非常基本的工具,没有人敢以激进的方式改变) 。

使用 find 和 xargs 的基本参数应该会给你一个更可移植的解决方案。

答案4

确保您正在使用的命令版本尚未具有递归操作的标志。 :)

相关内容