Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
15
Help us understand the problem. What is going on with this article?
@megane814

検索対象が多すぎる場合の対処法

More than 5 years have passed since last update.

ある条件を満たすファイルのうち、grepに引っかかるファイルを見つけるには、find、xargs、grepを組み合わせて使う。

しかし、例えば、

$ find / -name "*.*" -type f | xargs grep -n '$PATH' --color

なんてやったりすると、

xargs: grep: Argument list too long

このように返ってきてしまう。

上記はあまりに極端な例だけれども、きちんとfindで条件を絞ってみても、このように失敗する事はあるだろう。

これは、

シェルが展開した文字列が OS の制限 (正確には execve(2) の制限) を越えたためである。
引用元

そうな。

詳細は上記引用元に譲るとして、手っ取り早く問題を解決するには、以下の様にすれば良い。

$ find / -name "*.*" -type f | xargs -n 10 grep -n '$PATH' --color

これは、findの結果10ファイル分でgrepが実行される様に設定したオプション例で、これによって文字数制限に引っかからないらしい。

追記

Permission deniedとかNo such file or directoryとか言われてターミナルが埋まるのが嫌な時はこんな感じでどうぞ。

Bash
$ find / -name "*.*" -type f | xargs -n 10 grep 2> -n '$PATH' --color

お詫びと訂正

申し訳ない、上記"追記"の記載内容に不備がございました。
お詫びして訂正致します。

Permission deniedとかNo such file or directoryとか言われてターミナルが埋まるのが嫌な時はこんな感じでどうぞ。

Bash
$ find / 2> ~/.Trash/ZZZ -name "*.*" -type f | xargs -n 10 grep 2> ~/.Trash/ZZZ -n '$PATH' --color

これは、標準エラー出力の結果として吐き出したファイルを、直接ゴミ箱に突っ込んでます。
ていうかゴミ箱に吐き出させています。
前回の追記の内容を実施すると、カレントディレクトリに、2>直後のオプションをファイル名に持つファイルが出来てしまいます。
rmコマンドで削除しようとするとそんなオプションないよ、とか言われることもありますので、そういった場合はfinderから削除してください。

再度のお詫びと訂正

前回のコマンドが誤りというわけではないのですが、シェルコマンドの定番として、ゴミ箱じゃなくてNullを指定するっていうのがあるそうです。

以下が標準エラー出力を捨てる検索方法。

$ find / 2> /dev/null -name "*.*" -type f | xargs -n 10 grep 2> /dev/null -n '$PATH' --color

以上。

15
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
megane814
なんちゃって組み込みエンジニア。下回りの仕事ができる日を目指して頑張るっす。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
15
Help us understand the problem. What is going on with this article?