前言
在嘗試移動或刪除大量檔案時,可能會遇到檔案數量太多而無法操作的問題,這時可以使用 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 是刪除檔案的命令。
