我有一個目錄 /some/dir 包含數百萬個檔案和目錄。我需要刪除所有檔案的 X 位,但不是從目錄中刪除。
以下作品:
find /some/dir -type f -chmod -x {} \;
但我相信它會為每個檔案產生一個“chmod”進程。這可以解釋為什麼它運行很長時間。
有沒有辦法以更有效的方式做到這一點?
答案1
此外xargs
,正如 Ljm Dullaart 所提到的,您可以使用:
find /some/dir -type f -exec chmod -x {} +
作為調試技巧,您可以使用以下命令查看生成的命令:
find /some/dir -type f -exec echo chmod -x {} +
從手冊頁查找(1)命令:
-exec command {} +
此-exec
操作的變體對選定的檔案執行指定的命令,但命令列是透過在末尾附加每個選定的檔案名稱來建構的;該命令的調用總數將遠小於匹配的檔案數。命令列的建構方式與 xargs 建構其命令列的方式大致相同。命令中只允許有一個 的實例{}
,而且它必須出現在末尾,緊接在+
;之前。它需要被轉義(用\
)或引用以保護它不被 shell 解釋。該指令在起始目錄中執行。如果使用該+
表單的任何呼叫傳回非零值作為退出狀態,則 find 傳回非零退出狀態。如果 find 遇到錯誤,有時會導致立即退出,因此某些掛起的命令可能根本無法運作。因此,-exec my-command ... {} + -quit
可能不會導致 my-command 實際運作。這個變體-exec
總是回傳 true。
答案2
用於xargs
限制生成:
find /path/to/base/dir -type f -print0 | xargs -0 chmod -x