Argument list too long 本質是需要處理的長度超過系統的長度,因此無法執行相關命令。
經過搜索發現了兩種方法,思想都是將參數切分成小的段落進行執行。
法一:通過xargs傳遞參數 (數據量大了還是不太奏效)
find . -name "*.log" | xargs -0 rm
ls | xargs -t -I {} mv {} ../matchres/ 可以把當前目錄下的所有文件移到 "../matchres"下
ls | head -n 50 |xargs -t -I {} mv {} ../ 可以把當前目錄中的前50個移動到上級目錄
合並201301目錄文件到 hbtmp/bill201301.txt
cd 201301/
ls | xargs -t -I {} cat {} >> ../hbtmp/bill201301.txt
xargs使用的命令一次會被調用2000〜4000次左右,因此,如果列出的日志有一萬筆的話,可能就會被分成3到5次左右來執行,因而避開了。
find -maxdepth 1 -type f \( -exec grep -q '^- ' {} \; -o -print \)
- maxdepth 深度
- type 文件類型
法二:shell腳本循環執行rm命令
#!/bin/bash
# 設定需要刪除的文件夾
RM_DIR='/var/spool/clientmqueue'
cd $RM_DIR
for I in `ls`
do
rm -f $I
done
一行表達式:
for f in *.pdf; do rm "$f"; done
法三:將文件群手動划分為比較小的組合
mv [a-l]* ../foo2
mv [m-z]* ../foo2