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 -2M
2MB 未満のファイルを表します。-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
可能なフィルタの完全なリストを確認してください。