有很多方法可以做到这一点,包括 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
确保您正在使用的命令版本尚未具有递归操作的标志。 :)