對目錄樹中的每個檔案運行命令的最佳方法

對目錄樹中的每個檔案運行命令的最佳方法

有很多方法可以做到這一點,包括 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

確保您正在使用的命令版本尚未具有遞歸操作的標誌。 :)

相關內容