Linux FAQ : ls , cp , rm Argument list too long
在使用 Linux
如大量檔案
ls 查看
cp 複製
rm 清理
可能會遇到了 Argument list too long
大約 10 萬筆以上檔案 就可能會看到此訊息
主要可能是 指令搭配特殊字元 *
* 在 Linux 可說是全部都找
不過此符號有其存取上限 , 超過了就會讓 指令 出現 error
1. ls 可以嘗試看不帶入 *
2. cp 可參考
指令 :
for i in `ls` ; do cp $i $i.01 ; done
介紹 : 透過 for 迴圈 來一筆一筆檢查
3. rm 可參考
指令 :
du -a --time --time-style='+%s' `find ./* 2>/dev/null | xargs -i ls {} ` |
awk -v MAX=$date_time '{sec=(MAX-$2); print $3 " " sec}' |awk -v MAX=$lim '{if(MAX<$2) {print $1}}' | xargs rm -rf
介紹 : 用 du 和 xargs 來拆分 , du 傳給 find 輔助找出檔案 ( 隱藏檔 ... 等 )
awk 是檢查看時間超過設定值就顯示 ( 要設定變數 $lim )
範例 : 找出時間大於 10 sec 檔案與目錄
#!/bin/ksh
lim=10
du -a --time --time-style='+%s' `find ./* 2>/dev/null | xargs -i ls {} ` |
awk -v MAX=$date_time '{sec=(MAX-$2); print $3 " " sec}' | awk -v MAX=$lim '{if(MAX<$2) {print $1}}' | xargs rm -rf
備註 : 也可以 find -d 功能來清理檔案
find . -mtime +0 -delete