第一種情況:
在實(shí)際使用過(guò)程中,若一個(gè)目錄下文件或文件夾太多,在執(zhí)行;*” 命令時(shí) 會(huì)提示Argument list too long,如rm -rf /tmp/*命令下。
解決方案:
ls | xargs n 10 rm rf ls
SSH執(zhí)行以上命令,輸出所有的文件名(用空格分割) xargs就是將ls的輸出,每10個(gè)為一組(以空格為分隔符),作為rm rf的參數(shù) 也就是說(shuō)將所有文件名10個(gè)為一組,由rm rf刪除。
第二種情況:
rm、cp、mv是unix下面常用到的檔案處理指令,當(dāng)我們需要?jiǎng)h除大量的log檔案,如果檔案數(shù)太多就會(huì)出現(xiàn)此訊息【/bin/rm: Argument list too long】
解決方式如下:
例如要?jiǎng)h除 /tmp/*.log
則執(zhí)行【ls /tmp/*.log | xargs rm -f】這樣就可以蘿^__^,其他cp,mv同理!
第三種情況:
今日需要?jiǎng)h除/tmp目錄下的所有文件,文件數(shù)量比較多。
ls -lt /tmp | wc -l 385412
使用 rm *
后,系統(tǒng)提示錯(cuò)誤 Argument list too long
原因是在linux下,試圖傳太多參數(shù)給一個(gè)系統(tǒng)命令(ls *; cp *; rm *; cat *; etc..)時(shí),就會(huì)出現(xiàn) Argument list too long錯(cuò)誤。
解決方法如下:
使用find -exec 遍歷,然后執(zhí)行刪除便可。
sudo find /tmp -type f -exec rm {} \;
在linux中刪除大量文件時(shí),直接用rm會(huì)出現(xiàn):-bash: /bin/rm: 參數(shù)列表過(guò)長(zhǎng),的錯(cuò)誤。
這時(shí)可以用find命令來(lái)結(jié)合使用。
例:
1、rm * -rf 改為:
find . -name "*" | xargs rm -rf '*' 就行了。
2、rm test* -rf 改為:
find . -name "test*" | xargs rm -rf "test*"
mv時(shí)報(bào)參數(shù)列表過(guò)長(zhǎng),
for i in *.m;do mv $i ${i%.m};done
于是求助于google,探索過(guò)程就省略了,直接說(shuō)解決方法吧:
ls dir1 | xargs -t -I {} mv {} dir2/{}
這里的一對(duì)大括號(hào)是原文給的例子里用的,后來(lái)看了參數(shù)的用法,其實(shí)那對(duì)大括號(hào)是可以用任意字符串替換的,比如:
ls dir1 | xargs -t -I asdf mv asdf dir2/asdf
效果和大括號(hào)那一版是完全一樣的,就是看起來(lái)有點(diǎn)兒不嚴(yán)肅。
需要說(shuō)明的是,上面xargs的第二個(gè)參數(shù),是大寫的i,讀作”愛(ài);的那個(gè)字母,不是小寫的L。至于參數(shù)的含義嘛,我忘了。
Linux下 報(bào)錯(cuò);命令參數(shù)列表過(guò)長(zhǎng)”,在用mv命令一次移動(dòng)3萬(wàn)多個(gè)文件時(shí)失敗了,原始命令類似這樣:”mv $(ls dir1) dir2;。錯(cuò)誤提示的中心思想是:”你這參數(shù)也太TM多了吧;。
按照LZ想法大概可以這么做:find /dir1/ -maxdepth 1 | xargs -i mv {} /dir2/
如果參數(shù)過(guò)長(zhǎng),使用tar比較簡(jiǎn)單
tar -C /dir1/ -cf - . | tar -xf - -C /dir2/
于是求助于google,探索過(guò)程就省略了,直接說(shuō)解決方法吧:
ls dir1 | xargs -t -I {} mv {} dir2/{}
這里的一對(duì)大括號(hào)是原文給的例子里用的,后來(lái)看了參數(shù)的用法,其實(shí)那對(duì)大括號(hào)是可以用任意字符串替換的,比如:
ls dir1 | xargs -t -I asdf mv asdf dir2/asdf
效果和大括號(hào)那一版是完全一樣的,就是看起來(lái)有點(diǎn)兒不嚴(yán)肅。
需要說(shuō)明的是,上面xargs的第二個(gè)參數(shù),是大寫的i,讀作”愛(ài);的那個(gè)字母,不是小寫的L。至于參數(shù)的含義嘛,我忘了。
另外4種方法
作為一個(gè)linux用戶/系統(tǒng)管理員, 有些時(shí)候你會(huì)遇到以下錯(cuò)誤提示:
[user@localhost foo]$ mv * ../foo2
bash: /bin/mv: Argument list too long
;Argument list too long”參數(shù)列表過(guò)長(zhǎng)錯(cuò)誤經(jīng)常發(fā)生在用戶在一行簡(jiǎn)單命令中提供了過(guò)多的參數(shù)而導(dǎo)致,經(jīng)常在ls *, cp *, rm * 等中出現(xiàn)。
根據(jù)問(wèn)題的原因以下提供了四種方法,可以根據(jù)自己的情況酌情選用
方法1 : 將文件群手動(dòng)劃分為比較小的組合
e.g 1:
[user@localhost foo]$ mv [a-l]* ../foo2
[user@localhost foo]$ mv [m-z]* ../foo2
這是最基本的方法,只是簡(jiǎn)單的使參數(shù)數(shù)量符合要求,這種方法應(yīng)用范圍有限,只適用于文件列表中的名字分布比較均勻,另外這也是個(gè)初級(jí)用戶可以考慮的解決方案,不過(guò)需要很多重復(fù)命令和對(duì)文件名分布的觀察與猜測(cè)。
方法2 : 使用find命令
e.g 2:
[user@localhost foo]$ find $foo -type f -name '*' -exec mv {}$foo2/. \;
方法2通過(guò)find命令,將文件清單輸出到mv命令,使其一次處理一個(gè),這樣就完全避免了過(guò)量參數(shù)的存在,另外通過(guò)不同的參數(shù),可以指定除了名稱以外的時(shí)間戳,權(quán)限,以及inode等匹配模式。
方法2的缺點(diǎn)在于比較耗費(fèi)時(shí)間。
方法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
寫一個(gè)shell函數(shù)并不涉及到某種程度的復(fù)雜性, 這種方法比方法1和方法2相比更加靈活。
下面我們來(lái)擴(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校驗(yàn)散列文件和名字備份,符合給自己留條后路的哲學(xué)。
另外可以根據(jù)自己的需要無(wú)限制的擴(kuò)展功能。
方法4 : 終極解決方案,重新編譯內(nèi)核
首先使用這個(gè)方案之前要謹(jǐn)慎,因?yàn)樯婕暗叫薷膬?nèi)核源代碼,在生產(chǎn)環(huán)境中還是要斟酌一下并做好測(cè)試。
另外,這個(gè)方法是從根本上解決的,一勞永逸的
這也是開(kāi)放源碼的好處之一
首先在內(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ù)受限問(wèn)題。
然后 重新編譯并啟用新內(nèi)核即可。
WindowsSubsystem for Linux(WSL)2對(duì)Windows10版本1903和1909的支持 根據(jù)客戶......
閱讀微軟已經(jīng)向開(kāi)發(fā)通道中的Windows Insiders宣布了Windows 10 Insider Prev......
閱讀bull; Wine最近收到了對(duì)6.0版的更新。 bull; 此更新改進(jìn)了使用Wine的......
閱讀有趣的是,微軟正在努力使Linux在Windows10下運(yùn)行。我們都熟悉W......
閱讀適用于 Linux 的 Windows 子系統(tǒng)既是一種啟示,也是一場(chǎng)革命?,F(xiàn)在......
閱讀今天小編要為大家?guī)?lái)的是Linux使用文本瀏覽器lynx并顯示中文的方法!希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧...
次閱讀
今天小編要為大家分享的是Linux下安裝vagrant過(guò)程遇到的問(wèn)題解析,希望可以幫助到大家,有需要的朋友一起去看看吧...
次閱讀
Emacs是公認(rèn)的最好的代碼編輯器之一。由于默認(rèn)編碼跟文檔編碼不同會(huì)導(dǎo)致Emacs經(jīng)常出現(xiàn)亂碼!這種情況該如何解決呢?下面小編就為大家分享Linux下打開(kāi)Emacs出現(xiàn)亂碼的解決方法!有需要...
次閱讀
您是否檢查過(guò)您的 PC 是否符合更新到 Windows 11 的條件,但結(jié)果卻令人失望?在 Windows 10 之外繼續(xù)使用筆記本電腦或臺(tái)式機(jī)的少數(shù)選擇之一是安裝 Linux。這就是為什么這...
次閱讀
今天小編為大家?guī)?lái)的是從Vim中訪問(wèn)shell或者運(yùn)行外部命令的方法,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧...
次閱讀
今天小編為大家?guī)?lái)的是Linux中RedHat CentOS Ubuntu Fedora的區(qū)別詳解,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧...
次閱讀
今天小編為大家?guī)?lái)的是Linux下設(shè)置權(quán)限讓用戶只刪除自己的文件的方法,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧...
次閱讀
最近一些朋友問(wèn)小編Linux下如何設(shè)置交換文件?今天小編將為大家?guī)?lái)的是Linux下設(shè)置交換文件的方法,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧...
次閱讀
最近一些朋友問(wèn)小編Linux Mint如何設(shè)置面板位置以及添加面板元素?今天小編將為大家分享的是Linux Mint設(shè)置面板位置以及添加面板元素的方法,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去...
次閱讀
今天小編將為大家分享的是Linux中遇到device is busy的處理方法。希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧...
次閱讀
最近有些朋友問(wèn)小編 Linux菱形亂碼如何修改? 今天小編將為大家分享的是Linux菱形亂碼的修改方法,希望對(duì)大家會(huì)有幫助,有需要的朋友可以參考下...
次閱讀
今天小編要為大家分析的內(nèi)容是linux下鏈接庫(kù)失敗的原因分析,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧...
次閱讀
今天小編為大家?guī)?lái)的是Linux刪除制定時(shí)間的文件的方法,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧...
次閱讀
最近有些朋友問(wèn)小編如何用Windows通過(guò)網(wǎng)絡(luò)安裝RedHat Linux?今天小編為大家?guī)?lái)的是用Windows通過(guò)網(wǎng)絡(luò)安裝RedHat Linux的方法,有需要的朋友一起去看看吧...
次閱讀
最近一些Linux用戶發(fā)現(xiàn)很多日志文件都是空文件,如何過(guò)濾呢?今天小編就為大家?guī)?lái)Linux過(guò)濾空文件的命令總結(jié),希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧...
次閱讀