日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rm 时argument list too long

發(fā)布時間:2024/4/17 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rm 时argument list too long 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ls|xargs?rm?-f四種解決”Argument?list?too?long”參數(shù)列表過長的辦法 轉自 http://hi.baidu.com/cpuramdisk/item/5aa49ce00c0757aecf2d4f24 在linux中刪除大量文件時,直接用rm會出現(xiàn):-bash:?/bin/rm:?參數(shù)列表過長,的錯誤。這時可以用find命令來結合使用。例: 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 效果和大括號那一版是完全一樣的,就是看起來有點兒不嚴肅。 需要說明的是,上面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效果和大括號那一版是完全一樣的,就是看起來有點兒不嚴肅。需要說明的是,上面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ù)而導致,經(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ù)量符合要求,這種方法應用范圍有限,只適用于文件列表中的名字分布比較均勻,另外這也是個初級用戶可以考慮的解決方案,不過需要很多重復命令和對文件名分布的觀察與猜測。方法2?:?使用find命令 e.g?2:[user@localhost?foo]$?find?$foo?-type?f?-name?'*'?-exec?mv?{}$foo2/.?\; 方法2通過find命令,將文件清單輸出到mv命令,使其一次處理一個,這樣就完全避免了過量參數(shù)的存在,另外通過不同的參數(shù),可以指定除了名稱以外的時間戳,權限,以及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ù)并不涉及到某種程度的復雜性,?這種方法比方法1和方法2相比更加靈活。 下面我們來擴展一下例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校驗散列文件和名字備份,符合給自己留條后路的哲學。 另外可以根據(jù)自己的需要無限制的擴展功能。方法4?:?終極解決方案,重新編譯內核 首先使用這個方案之前要謹慎,因為涉及到修改內核源代碼,在生產(chǎn)環(huán)境中還是要斟酌一下并做好測試。 另外,這個方法是從根本上解決的,一勞永逸的? 這也是開放源碼的好處之一? 首先在內核源碼中找到?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ù)受限問題。 然后?重新編譯并啟用新內核即可。


轉載于:https://blog.51cto.com/yuzwei/1872703

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的rm 时argument list too long的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。