Skip to content

[已解決][Linux] Argument list too long ...

Last Updated on 2023-11-09 by Clay

當我們在 Linux 系統中要一口氣處理大量文件的時候,比方說『複製』、『移動』、『刪除』...... 若是檔案數量真的太多且我們使用了萬用字元 * 來匹配任意檔案,那麼我們很有可能會看到以下這個報錯:

Argument list too long

就如同報錯訊息所示,這是由於我們所下指令的參數過多 (畢竟是一大堆文件) 所導致的。

一個簡單直觀的辦法是使用我們遞迴地處理這些檔案,或是我們直接使用 xargs 指令來解決 —— 這也是大家最推薦的方法之一。

以下是修正過後的命令:

  1. 刪除 A 資料夾底下的所有 .log 檔案:
find A/ -name "*.log" -print0 | xargs -0 rm

或者:

find A/ -name "*.log" -exec rm {} +


  1. 將 A 資料夾底下的所有 .log 檔案移動到 B 資料夾:
find A/ -name "*.log" -print0 | xargs -0 mv -t B/

或者:

find A/ -name "*.log" -exec mv {} B/ +


  1. 將 A 資料夾底下的所有 .log 檔案複製到 B 資料夾:
find A/ -name "*.log" -print0 | xargs -0 cp -t B/

或者:

find A/ -name "*.log" -exec cp {} B/ +

-exec 命令後面,{}find 找到的檔案,而 + 表示將多個結果一起傳遞給 exec 指定的命令,這有助於提高效率。在使用 -t 選項給 mvcp 指定目標目錄時,它允許我們一次移動或複製多個檔案。

這些命令避免了 Argument list too long 的錯誤,因為它們一次處理一個或一小部分檔案,而不是一次性處理全部檔案,從而避免超出了命令行參數的最大限制。


References


Read More

Tags:

Leave a Reply