前言
在嘗試移動或刪除大量檔案時,可能會遇到檔案數量太多而無法操作的問題,這時可以使用 find
指令來解決。
原理是 find
指令可以遞迴搜尋指定目錄下的檔案,然後將搜尋到的檔案名稱輸出到標準輸出,再使用 xargs
或 -exec
參數來處理檔案。
這樣就可以一次處理一個檔案,而不是一次處理所有檔案,這樣就可以避免一次處理太多檔案而導致無法操作的問題。
錯誤原因
會出現參數過多的問題,是因為 Linux 系統的命令行參數有限制,當參數超過限制時就會出現錯誤。
可以使用 getconf ARG_MAX
指令來查看系統的命令行參數限制。
另外也可以嘗試執行 ulimit -S -s unlimited
來解決,常見的程式如 rm
、mv
、cp
, rsync
等都會有這個問題。
解決方法
### 配合 xargs
指令處理檔案
|
|
find
查找檔案,xargs
用來執行命令,-print0
和 -0
是為了處理檔案名稱中有空格的情況。
rm
是刪除檔案的命令,可以改成 mv
來移動檔案,cp
來複製檔案等。
使用 -exec
處理檔案
|
|
-exec
的作用是執行指定的命令,rm -f {}
是刪除檔案的命令,可以改成 -fv
來顯示刪除的檔案名稱,{}
代表檔案名稱,\;
是結束符號。
可以將 rm -f
改成 mv
來移動檔案,cp
來複製檔案等。
使用 -delete
刪除檔案
|
|
-print
的作用是將刪除的檔案列印出來,可以用來檢查刪除的檔案是否正確。-delete
是刪除檔案的命令。