GNU/Linux >> Linux の 問題 >  >> Linux

複雑な検索のためにfindとgrepを組み合わせる方法は? (GNU/linux、find、grep)

試す

find /srv/www/*/htdocs/system/application/ -name "*.php" -exec grep "debug (" {} \; -print

これにより、application の下のフォルダーが再帰的に検索されます。 .php のファイルの場合 拡張子を付けて grep に渡します .

これを最適化するには、次を実行します:

find /srv/www/*/htdocs/system/application/ -name "*.php" -print0 | xargs -0 grep -H "debug ("

これは xargs を使用します すべての .php を渡す find で出力されるファイル 単一の grep への引数として コマンド; 例:grep "debug (" file1 file2 file3 . -print0 find のオプション および -0 xargs のオプション ファイル名とディレクトリ名のスペースが正しく処理されていることを確認してください。 -H grep に渡されたオプション すべての状況でファイル名が出力されるようにします。 (デフォルトでは、grep 複数の引数が渡された場合にのみ、ファイル名を出力します。)

man xargs より:

<ブロック引用>

-0

      入力項目は、空白ではなくヌル文字で終了し、引用符とバックスラッシュは特別なものではありません (すべての文字が文字どおりに解釈されます)。他の引数と同様に扱われるファイル文字列の終わりを無効にします。入力項目に空白、引用符、またはバックスラッシュが含まれる可能性がある場合に役立ちます。 GNU find -print0 オプションは、このモードに適した入力を生成します。


find grep を使用できます。 直接 (少なくとも GNU grep ):

grep -RH --include='*.php' "debug (" /srv/www/*/htdocs/system/application/

単一のプロセス フォークに到達しました。

オプション:

  • -R, --dereference-recursive Read all files under each directory, recursively. Follow all symbolic links, unlike -r.
  • -H, --with-filename Print the file name for each match. This is the default when there is more than one file to search.
  • --include=GLOB Search only files whose base name matches GLOB (using wildcard matching as described under --exclude).
  • --exclude=GLOB Skip any command-line file with a name suffix that matches the pattern GLOB, using wildcard matching; a name suffix is either the whole name, or any suffix starting after a / and before a +non-/. When searching recursively, skip any subfile whose base name matches GLOB; the base name is the part after the last /. A pattern can use *, ?, and [...] as wildcards, and \ to quote a wildcard or backslash character literally.

Linux
  1. サイズと拡張子でファイルを検索する方法は?

  2. Linuxでファイルを検索するには、検索と検索を使用します

  3. Linuxシェルスクリプトで正規表現を使用してファイルを検索する方法

  1. Linux で単語を検索し、行全体を表示する

  2. 名前と部分パスでファイルを検索するにはどうすればよいですか?

  3. Linuxでwar、ear、およびjarファイル内のファイルを再帰的に検索する方法

  1. Linuxで「find」コマンドを使用して複数のファイル名(拡張機能)を検索する方法

  2. Linuxでディレクトリを再帰的に検索および削除する方法

  3. Linuxでディレクトリのコンテンツ全体で単語を検索する方法