Bus errorとSegmentation faultに困ったら見るブログ

物理の研究者による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

【シェルコマンド】lsでArgument list too long.というエラー (引数リストが長すぎます: rm)

ちょい前にlsしてたら、次のようなエラーが出てきた

Argument list too long.
そのエラーでググってみたら、これはファイル数が多すぎるときに出るエラーらしい
ファイル数は確か18000くらい?


回避方法としては、

find . -name \*.log | xargs ls -l
とか
find . -name \*.log -exec ls -l {} \;
どっちもかなり遅かった気がする・・・・

ちなみに不要ファイルを削除して、回避しようにもrmで同じエラーが出るので対処できない・・・

ls -Ul
なら動く、という記事を見つけたが試してないので本当にlsできるかは不明





find ./result/* -name "hoge*" | grep -e "foo" > hoge.txt

find ./result/* -name "hoge*" | grep -e "foo" -e "aaaa" > hoge.txt

find ./result/* -name "hoge*" | grep -ve "foo" -ve "aaaa" > hoge.txt

みたいにしてgrep -eを使ってさらにファイルを絞ることもできる
findを使っているのは単純にlsではファイル数が多すぎるとエラーが出るため

2番目の例では-eを2つ並べている

3番目の例では-veオプションを使っている
これはeオプションの否定になる
つまりfooもaaaaもファイル名に入っていないファイルがリストされる

正規表現を使いこなしていない自分にはかなり便利




また遭遇したので追記

echo ~/somewhere/* | xargs rm -f


ランキング参加中です

↓クリックしていただけると嬉しいです〜