linux批量操作時提示Argument list too long解決方法
第一種情況:
在實際使用過程中,若一個目錄下文件或文件夾太多,在執(zhí)行“*” 命令時 會提示Argument list too long,如rm -rf /tmp/*命令下。
解決方案:
ls | xargs n 10 rm rf ls
SSH執(zhí)行以上命令,輸出所有的文件名(用空格分割) xargs就是將ls的輸出,每10個為一組(以空格為分隔符),作為rm rf的參數(shù) 也就是說將所有文件名10個為一組,由rm rf刪除。
第二種情況:
rm、cp、mv是unix下面常用到的檔案處理指令,當(dāng)我們需要刪除大量的log檔案,如果檔案數(shù)太多就會出現(xiàn)此訊息【/bin/rm: Argument list too long】
解決方式如下:
例如要刪除 /tmp/*.log
則執(zhí)行【ls /tmp/*.log | xargs rm -f】這樣就可以蘿^__^,其他cp,mv同理!
第三種情況:
今日需要刪除/tmp目錄下的所有文件,文件數(shù)量比較多。
ls -lt /tmp | wc -l 385412
使用 rm * 后,系統(tǒng)提示錯誤 Argument list too long
原因是在linux下,試圖傳太多參數(shù)給一個系統(tǒng)命令(ls *; cp *; rm *; cat *; etc..)時,就會出現(xiàn) Argument list too long錯誤。
解決方法如下:
使用find -exec 遍歷,然后執(zhí)行刪除便可。
sudo find /tmp -type f -exec rm {} \;
在linux中刪除大量文件時,直接用rm會出現(xiàn):-bash: /bin/rm: 參數(shù)列表過長,的錯誤。
這時可以用find命令來結(jié)合使用。
例:
1、rm * -rf 改為:
find . -name "*" | xargs rm -rf '*' 就行了。
2、rm test* -rf 改為:
find . -name "test*" | xargs rm -rf "test*"
mv時報參數(shù)列表過長,
for i in *.m;do mv $i ${i%.m};done
于是求助于google,探索過程就省略了,直接說解決方法吧:
ls dir1 | xargs -t -I {} mv {} dir2/{}
這里的一對大括號是原文給的例子里用的,后來看了參數(shù)的用法,其實那對大括號是可以用任意字符串替換的,比如:
ls dir1 | xargs -t -I asdf mv asdf dir2/asdf
效果和大括號那一版是完全一樣的,就是看起來有點兒不嚴(yán)肅。
需要說明的是,上面xargs的第二個參數(shù),是大寫的i,讀作”愛“的那個字母,不是小寫的L。至于參數(shù)的含義嘛,我忘了。
Linux下 報錯“命令參數(shù)列表過長”,在用mv命令一次移動3萬多個文件時失敗了,原始命令類似這樣:”mv $(ls dir1) dir2“。錯誤提示的中心思想是:”你這參數(shù)也太TM多了吧“。
按照LZ想法大概可以這么做:find /dir1/ -maxdepth 1 | xargs -i mv {} /dir2/
如果參數(shù)過長,使用tar比較簡單
tar -C /dir1/ -cf - . | tar -xf - -C /dir2/
于是求助于google,探索過程就省略了,直接說解決方法吧:
ls dir1 | xargs -t -I {} mv {} dir2/{}
這里的一對大括號是原文給的例子里用的,后來看了參數(shù)的用法,其實那對大括號是可以用任意字符串替換的,比如:
ls dir1 | xargs -t -I asdf mv asdf dir2/asdf
效果和大括號那一版是完全一樣的,就是看起來有點兒不嚴(yán)肅。
需要說明的是,上面xargs的第二個參數(shù),是大寫的i,讀作”愛“的那個字母,不是小寫的L。至于參數(shù)的含義嘛,我忘了。
另外4種方法
作為一個linux用戶/系統(tǒng)管理員, 有些時候你會遇到以下錯誤提示:
[user@localhost foo]$ mv * ../foo2
bash: /bin/mv: Argument list too long
“Argument list too long”參數(shù)列表過長錯誤經(jīng)常發(fā)生在用戶在一行簡單命令中提供了過多的參數(shù)而導(dǎo)致,經(jīng)常在ls *, cp *, rm * 等中出現(xiàn)。
根據(jù)問題的原因以下提供了四種方法,可以根據(jù)自己的情況酌情選用
方法1 : 將文件群手動劃分為比較小的組合
e.g 1:
[user@localhost foo]$ mv [a-l]* ../foo2
[user@localhost foo]$ mv [m-z]* ../foo2
這是最基本的方法,只是簡單的使參數(shù)數(shù)量符合要求,這種方法應(yīng)用范圍有限,只適用于文件列表中的名字分布比較均勻,另外這也是個初級用戶可以考慮的解決方案,不過需要很多重復(fù)命令和對文件名分布的觀察與猜測。
方法2 : 使用find命令
e.g 2:
[user@localhost foo]$ find $foo -type f -name '*' -exec mv {}$foo2/. \;
方法2通過find命令,將文件清單輸出到mv命令,使其一次處理一個,這樣就完全避免了過量參數(shù)的存在,另外通過不同的參數(shù),可以指定除了名稱以外的時間戳,權(quán)限,以及inode等匹配模式。
方法2的缺點在于比較耗費時間。
方法3 : 創(chuàng)建shell函數(shù)
e.g 3.1:
function huge_mv ()
{whileread line1; do
mv foo/$line1 ../foo2
done
}
ls -1 foo/ | huge_mv
寫一個shell函數(shù)并不涉及到某種程度的復(fù)雜性, 這種方法比方法1和方法2相比更加靈活。
下面我們來擴(kuò)展一下例3.1 :
e.g 3.2:
function huge_mv ()
{whileread line1; do
md5sum foo/$line1 >> ~/md5sums
ls -l foo/$line1 >> ~/backup_list
mv foo/$line1 ../foo2
done
}
ls -1 foo/ | huge_mv
相比例3.1,例3.2生成了文件的md校驗散列文件和名字備份,符合給自己留條后路的哲學(xué)。
另外可以根據(jù)自己的需要無限制的擴(kuò)展功能。
方法4 : 終極解決方案,重新編譯內(nèi)核
首先使用這個方案之前要謹(jǐn)慎,因為涉及到修改內(nèi)核源代碼,在生產(chǎn)環(huán)境中還是要斟酌一下并做好測試。
另外,這個方法是從根本上解決的,一勞永逸的
這也是開放源碼的好處之一
首先在內(nèi)核源碼中找到 include/linux/binfmts.h文件 ,搜索到以下字段:
/*
* MAX_ARG_PAGES defines the number of pages allocated for arguments
* and envelope for the new program. 32 should suffice, this gives
* a maximum env+arg of 128kB w/4KB pages!
*/
#define MAX_ARG_PAGES 32
修改 MAX_ARG_PAGES數(shù)值為 64 或者更高即可完善的解決參數(shù)受限問題。
然后 重新編譯并啟用新內(nèi)核即可。
相關(guān)文章

集成系統(tǒng)級Claw模式! Deepin 官宣發(fā)布 25.1 版本
deepin操作系統(tǒng)發(fā)布了最新的 25.1 版本更新,該版本基于 deepin 25 正式版積累的多輪內(nèi)測成果,在 AI 能力、內(nèi)核版本、桌面環(huán)境、文件管理器以及系統(tǒng)安全等方面進(jìn)行了更新2026-04-13
又一代老硬件退場! Linux 內(nèi)核正式放棄Intel 486 CPU
在過去的幾十年間,CPU 的架構(gòu)已經(jīng)經(jīng)歷了飛速發(fā)展,x86 系列就是其中之一,而 i486 則屬于該系列中的一個,當(dāng)前,i486 的CPU處理器已經(jīng)夠老,從 Linux 7.1 開始將不再有對2026-04-09
趕緊收藏! 全網(wǎng)最全 Linux 命令總結(jié)
我把 Linux 中最常用、最實用、最常被問到的命令按照實際使用場景分類整理,方便你快速查閱和記憶,內(nèi)容覆蓋日常運維、開發(fā)調(diào)試、性能分析、文件處理、網(wǎng)絡(luò)、安全、系統(tǒng)管2026-04-08
一分鐘內(nèi)檢查Linux服務(wù)器性能? 9個性能檢測常用的基本命令
今天我們來看看Linux系統(tǒng)中用于性能監(jiān)控的一系列命令,這些命令可以快速查看機(jī)器的負(fù)載情況,詳細(xì)請看下文介紹2026-03-18
從零基礎(chǔ)到精通! 適合高級用戶的15款Linux發(fā)行版推薦
Linux作為操作系統(tǒng)領(lǐng)域靈活性和可定制性的基石,提供了大量滿足不同用戶需求的發(fā)行版,今天分享適合高級用戶的15款Linux發(fā)行版2026-03-10
開箱即用? 這4個高手級Linux發(fā)行版遠(yuǎn)沒你想象的那么安全易用
如果你正在糾結(jié)用哪個發(fā)行版?零基礎(chǔ)新手別被“高端”“極客”“聲明式”這些詞沖昏頭腦,先用好用的,再慢慢進(jìn)階2026-03-10
這幾款SSH工具真的夠用了! Linux好用的ssh工具推薦
在Linux上使用SSH,您需要安裝一個SSH客戶端,今天整理找到的8 款 SSH / 終端工具,從免費開源到企業(yè)級商用,從輕量化命令行到一站式工具箱,每款都做了介紹與對比,希望能2026-03-09
在Linux系統(tǒng)下有兩種用戶,即高級用戶root,普通用戶,高級用戶root可以在系統(tǒng)中做任何事情,普通用戶僅可在Linux系統(tǒng)中做有限的事情,下面我們就來看看切換方法2026-02-28
揭秘當(dāng)前登錄用戶的身份! Linux中使用logname命令的技巧
logname命令就是這樣一個簡單但強(qiáng)大的工具,它能幫助我們輕松獲取當(dāng)前登錄用戶的用戶名,今天,我們就來深入探索一下這個命令的工作原理、使用方法和最佳實踐2026-02-26
在 Linux 系統(tǒng)中,DNS 緩存是一種將域名和 IP 地址映射關(guān)系緩存在本地的機(jī)制,可以加快域名解析速度,并減輕 DNS 服務(wù)器的負(fù)載2026-02-26



