Last Updated on 2023-11-09 by Clay
當我們在 Linux 系統中要一口氣處理大量文件的時候,比方說『複製』、『移動』、『刪除』…… 若是檔案數量真的太多且我們使用了萬用字元 * 來匹配任意檔案,那麼我們很有可能會看到以下這個報錯:
Argument list too long
就如同報錯訊息所示,這是由於我們所下指令的參數過多 (畢竟是一大堆文件) 所導致的。
一個簡單直觀的辦法是使用我們遞迴地處理這些檔案,或是我們直接使用 xargs 指令來解決 —— 這也是大家最推薦的方法之一。
以下是修正過後的命令:
- 刪除 A 資料夾底下的所有
.log
檔案:
find A/ -name "*.log" -print0 | xargs -0 rm
或者:
find A/ -name "*.log" -exec rm {} +
- 將 A 資料夾底下的所有
.log
檔案移動到 B 資料夾:
find A/ -name "*.log" -print0 | xargs -0 mv -t B/
或者:
find A/ -name "*.log" -exec mv {} B/ +
- 將 A 資料夾底下的所有
.log
檔案複製到 B 資料夾:
find A/ -name "*.log" -print0 | xargs -0 cp -t B/
或者:
find A/ -name "*.log" -exec cp {} B/ +
在 -exec
命令後面,{}
是 find
找到的檔案,而 +
表示將多個結果一起傳遞給 exec
指定的命令,這有助於提高效率。在使用 -t
選項給 mv
或 cp
指定目標目錄時,它允許我們一次移動或複製多個檔案。
這些命令避免了 Argument list too long
的錯誤,因為它們一次處理一個或一小部分檔案,而不是一次性處理全部檔案,從而避免超出了命令行參數的最大限制。
References
- https://stackoverflow.com/questions/11289551/argument-list-too-long-error-for-rm-cp-mv-commands
- https://unix.stackexchange.com/questions/45583/argument-list-too-long-how-do-i-deal-with-it-without-changing-my-command
- https://askubuntu.com/questions/1048964/deleting-many-files-results-in-argument-list-too-long
- https://github.com/firebase/firebase-ios-sdk/issues/4577
- https://superuser.com/questions/391811/argument-list-too-long-error-for-rm-rf-on-a-directory-with-4000-files?rq=1
Read More
- [已解決][Linux] welcome to emergency mode! after logging in type “journalctl -xb” to view system logs “systemctl reboot” to reboot “systemctl default” to try again to boot into default mode. give root password for maintenance
- [已解決] Linux 底下連接不到 Android 手機
- [已解決] Error: invalid environment block. Press any key to continue…
- [已解決] the root filesystem on /dev/sda1 requires a manual fsck