ファイルシステム全体でテキストを検索するには?

ファイルシステム全体でテキストを検索するには?

grepツールを使用し、ファイルシステム全体で「800x600」というテキスト文字列を検索するとします。

私は試した:

grep -r 800x600 /

しかし、うまくいきません。

私のコマンドが実行する必要があるのは、ルートの下のすべてのファイル/フォルダを繰り返しgrepして "800x600"テキストを見つけて検索結果を一覧表示することだと思います。

私は何が間違っていましたか?

ベストアンサー1

私は通常、grep複数のファイルを実行するために次のスタイルのコマンドを使用します。

find / -xdev -type f -print0 | xargs -0 grep -H "800x600"

実際に行うことは、システム上のすべてのファイルをリストし、各ファイルに指定された引数とgrep各ファイル名を使用して実行することです。

この-xdevパラメーターは、他のファイルシステムを無視する必要があることを示します。これは特別なファイルシステムを避けるのに最適です。/procただし、通常のファイルシステムも無視します。たとえば、/homeフォルダが別のパーティションにある場合、検索されません。 - 言わなければなりませんfind / /home -xdev ...

-type fファイルだけを検索するという意味なので、ディレクトリ、デバイス、その他の特殊ファイルは無視されます(まだディレクトリに再帰してその中のファイルで実行されます。ディレクトリ自体では実行されないので、grepとにかく動作しません)grep。オプションは常に出力にファイル名を印刷するように指示-Hします。grep

findファイルのリストをフィルタリングするさまざまなオプションを許可します。たとえば、-name '*.txt'.txt で終わるファイルだけが処理されます。-size -2M2MB 未満のファイルを表します。-mtime -5過去5日以内に変更されたファイルを示します。一緒に結合するには、-a forを使用してください。そしてそして-oまたは'('括弧を使用して式')'をグループ化します(シェルが解釈されないように引用符で囲みます)。たとえば、

find / -xdev '(' -type f -a -name '*.txt' -a -size -2M -a -mtime -5 ')' -print0 | xargs -0 grep -H "800x600"

man find可能なフィルタの完全なリストを確認してください。

おすすめ記事