Featured image of post 解決處理大量檔案時遇到檔案數量太多而無法處理的問題

解決處理大量檔案時遇到檔案數量太多而無法處理的問題

在 Linux 系統中,當要刪除或移動大量檔案時,可能會遇到檔案數量太多而無法操作的問題,這時可以使用 `find` 指令來解決。

最後更新
約 524 字

前言

在嘗試移動或刪除大量檔案時,可能會遇到檔案數量太多而無法操作的問題,這時可以使用 find 指令來解決。

原理是 find 指令可以遞迴搜尋指定目錄下的檔案,然後將搜尋到的檔案名稱輸出到標準輸出,再使用 xargs-exec 參數來處理檔案。

這樣就可以一次處理一個檔案,而不是一次處理所有檔案,這樣就可以避免一次處理太多檔案而導致無法操作的問題。

錯誤原因

會出現參數過多的問題,是因為 Linux 系統的命令行參數有限制,當參數超過限制時就會出現錯誤。

可以使用 getconf ARG_MAX 指令來查看系統的命令行參數限制。

另外也可以嘗試執行 ulimit -S -s unlimited 來解決,常見的程式如 rmmvcp, rsync 等都會有這個問題。

解決方法

### 配合 xargs 指令處理檔案

1
find /path/to/directory -print0 | xargs -0 rm

find 查找檔案,xargs 用來執行命令,-print0-0 是為了處理檔案名稱中有空格的情況。 rm 是刪除檔案的命令,可以改成 mv 來移動檔案,cp 來複製檔案等。

使用 -exec 處理檔案

1
find /path/to/directory -type f -exec rm -f {} \;

-exec 的作用是執行指定的命令,rm -f {} 是刪除檔案的命令,可以改成 -fv 來顯示刪除的檔案名稱,{} 代表檔案名稱,\; 是結束符號。 可以將 rm -f 改成 mv 來移動檔案,cp 來複製檔案等。

使用 -delete 刪除檔案

1
find /path/to/directory -type f -delete -print

-print 的作用是將刪除的檔案列印出來,可以用來檢查刪除的檔案是否正確。-delete 是刪除檔案的命令。


使用 Hugo 建立
主題 StackJimmy 設計