91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux批量操作時提示Argument list too long怎么辦

發布時間:2021-07-14 15:02:49 來源:億速云 閱讀:314 作者:小新 欄目:系統運維

這篇文章主要介紹linux批量操作時提示Argument list too long怎么辦,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

第一種情況:

在實際使用過程中,若一個目錄下文件或文件夾太多,在執行“*” 命令時 會提示Argument list too long,如rm -rf /tmp/*命令下。
解決方案:

ls | xargs ­n 10 rm ­rf ls

SSH執行以上命令,輸出所有的文件名(用空格分割) xargs就是將ls的輸出,每10個為一組(以空格為分隔符),作為rm ­rf的參數 也就是說將所有文件名10個為一組,由rm ­rf刪除。

第二種情況:

rm、cp、mv是unix下面常用到的檔案處理指令,當我們需要刪除大量的log檔案,如果檔案數太多就會出現此訊息【/bin/rm: Argument list too long】

解決方式如下:
例如要刪除 /tmp/*.log
則執行【ls /tmp/*.log | xargs rm -f】這樣就可以蘿^__^,其他cp,mv同理!

第三種情況:

今日需要刪除/tmp目錄下的所有文件,文件數量比較多。

ls -lt /tmp | wc -l  
385412

使用 rm * 后,系統提示錯誤 Argument list too long
原因是在linux下,試圖傳太多參數給一個系統命令(ls *; cp *; rm *; cat *; etc..)時,就會出現 Argument list too long錯誤。

解決方法如下:
使用find -exec 遍歷,然后執行刪除便可。

sudo find /tmp -type f -exec rm {} \;

在linux中刪除大量文件時,直接用rm會出現:-bash: /bin/rm: 參數列表過長,的錯誤。

這時可以用find命令來結合使用。

例:
1、rm * -rf 改為:
find . -name "*" | xargs rm -rf '*' 就行了。

2、rm test* -rf 改為:
find . -name "test*" | xargs rm -rf "test*"

mv時報參數列表過長,
for i in *.m;do mv $i ${i%.m};done
于是求助于google,探索過程就省略了,直接說解決方法吧:
ls dir1 | xargs -t -I {} mv {} dir2/{}
這里的一對大括號是原文給的例子里用的,后來看了參數的用法,其實那對大括號是可以用任意字符串替換的,比如:
ls dir1 | xargs -t -I asdf mv asdf dir2/asdf
效果和大括號那一版是完全一樣的,就是看起來有點兒不嚴肅。
需要說明的是,上面xargs的第二個參數,是大寫的i,讀作”愛“的那個字母,不是小寫的L。至于參數的含義嘛,我忘了。
 

Linux下 報錯“命令參數列表過長”,在用mv命令一次移動3萬多個文件時失敗了,原始命令類似這樣:”mv $(ls dir1) dir2“。錯誤提示的中心思想是:”你這參數也太TM多了吧“。
按照LZ想法大概可以這么做:find /dir1/ -maxdepth 1 | xargs -i mv {} /dir2/
如果參數過長,使用tar比較簡單
tar -C /dir1/ -cf - . | tar -xf - -C /dir2/

  于是求助于google,探索過程就省略了,直接說解決方法吧:
  ls dir1 | xargs -t -I {} mv {} dir2/{}
  這里的一對大括號是原文給的例子里用的,后來看了參數的用法,其實那對大括號是可以用任意字符串替換的,比如:
  ls dir1 | xargs -t -I asdf mv asdf dir2/asdf
  效果和大括號那一版是完全一樣的,就是看起來有點兒不嚴肅。
  需要說明的是,上面xargs的第二個參數,是大寫的i,讀作”愛“的那個字母,不是小寫的L。至于參數的含義嘛,我忘了。


另外4種方法
作為一個linux用戶/系統管理員, 有些時候你會遇到以下錯誤提示:

[user@localhost foo]$ mv * ../foo2
bash: /bin/mv: Argument list too long

“Argument list too long”參數列表過長錯誤經常發生在用戶在一行簡單命令中提供了過多的參數而導致,經常在ls *, cp *, rm * 等中出現。
根據問題的原因以下提供了四種方法,可以根據自己的情況酌情選用
方法1 : 將文件群手動劃分為比較小的組合
e.g 1:

[user@localhost foo]$ mv [a-l]* ../foo2
[user@localhost foo]$ mv [m-z]* ../foo2

這是最基本的方法,只是簡單的使參數數量符合要求,這種方法應用范圍有限,只適用于文件列表中的名字分布比較均勻,另外這也是個初級用戶可以考慮的解決方案,不過需要很多重復命令和對文件名分布的觀察與猜測。

方法2 : 使用find命令
e.g 2:

[user@localhost foo]$ find $foo -type f -name '*' -exec mv {}$foo2/. \;
方法2通過find命令,將文件清單輸出到mv命令,使其一次處理一個,這樣就完全避免了過量參數的存在,另外通過不同的參數,可以指定除了名稱以外的時間戳,權限,以及inode等匹配模式。
方法2的缺點在于比較耗費時間。

方法3 : 創建shell函數
e.g 3.1:

function huge_mv ()
{whileread line1; do
mv foo/$line1 ../foo2
done
}
ls -1 foo/ | huge_mv
寫一個shell函數并不涉及到某種程度的復雜性, 這種方法比方法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校驗散列文件和名字備份,符合給自己留條后路的哲學。
另外可以根據自己的需要無限制的擴展功能。

方法4 : 終極解決方案,重新編譯內核
首先使用這個方案之前要謹慎,因為涉及到修改內核源代碼,在生產環境中還是要斟酌一下并做好測試。
另外,這個方法是從根本上解決的,一勞永逸的
這也是開放源碼的好處之一
首先在內核源碼中找到 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數值為 64 或者更高即可完善的解決參數受限問題。
然后 重新編譯并啟用新內核即可。

以上是“linux批量操作時提示Argument list too long怎么辦”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

卫辉市| 沙河市| 咸阳市| 齐齐哈尔市| 宝鸡市| 金昌市| 巢湖市| 合肥市| 灵石县| 桃园市| 德安县| 克什克腾旗| 深州市| 平昌县| 灌云县| 长顺县| 绥化市| 平江县| 苏州市| 汤阴县| 大方县| 南宫市| 昔阳县| 亳州市| 广丰县| 桦南县| 慈溪市| 万全县| 曲水县| 紫金县| 夏邑县| 泉州市| 循化| 峨边| 莎车县| 怀集县| 新余市| 尼勒克县| 红桥区| 保山市| 利川市|