有效地從大目錄中的檔案中刪除x位

有效地從大目錄中的檔案中刪除x位

我有一個目錄 /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

相關內容