
有很多方法可以做到這一點,包括 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
確保您正在使用的命令版本尚未具有遞歸操作的標誌。 :)