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

ワイルドカードを使用して必要なファイルの名前を再帰的にフィルタリングするにはどうすればよいですか?

grep を使用 の --include オプション:

grep -ir "string" --include="*.php" .

grep のバージョンをお持ちの場合 --include がない オプションで、以下を使用できます。これらは両方とも、次のようなディレクトリ構造でテストされました:

$ tree
.
├── a
├── b
│   └── foo2.php
├── c
│   └── d
│       └── e
│           └── f
│               └── g
│                   └── h
│                       └── foo.php
├── foo1.php
└── foo.php

すべての .php ファイルには文字列 string が含まれています .

<オール>
  • find を使用

    $ find . -name '*php' -exec grep -H string {} +
    ./b/foo2.php:string
    ./foo1.php:string
    ./c/d/e/f/g/h/foo.php:string
    

    説明

    これにより、すべての .php が検出されます ファイルを作成してから grep -H string を実行します それらのそれぞれに。 find で の -exec オプション、{} 見つかった各ファイルに置き換えられます。 -H grep に伝えます ファイル名と一致した行を出力します。

  • bash の十分に新しいバージョンがあるとします。 、 globstar を使用 :

    $ shopt -s globstar
    $ grep -H string  **/*php
    b/foo2.php:string
    c/d/e/f/g/h/foo.php:string
    foo1.php:string
    

    説明

    bash マニュアルで説明されているとおり:

    <ブロック引用>

    グロブスター

    設定されている場合、ファイル名展開コンテキストで使用されるパターン ‘**’ は、すべてのファイルと 0 個以上のディレクトリとサブディレクトリに一致します。パターンの後に「/」が続く場合、ディレクトリとサブディレクトリのみが一致します。

    shopt -s globstar を実行することで あなたは機能を有効にしており、Bash の globstar **/*php にするオプション すべての .php に展開 現在のディレクトリ内のファイル (** 0 個以上のディレクトリに一致するため、**/*php ./foo.php に一致 同様に) string が grep されます .


  • Linux
    1. フォルダ内の不足しているファイルの名前を印刷するにはどうすればよいですか?

    2. フォルダ内の多くのファイルの名前を変更するにはどうすればよいですか?

    3. 再帰的にgrepするにはどうすればよいですか?

    1. コマンドラインから PHP コードを実行するにはどうすればよいですか?

    2. 文字列を含む名前のすべてのファイルを検索

    3. ファイルの各行の先頭に文字列を追加するにはどうすればよいですか?

    1. wgetで最新のAnacondaをインストールするにはどうすればよいですか

    2. Linuxでxargsを使用してファイルを移動するにはどうすればよいですか?

    3. rsync を使用してデフォルトでファイルを除外するにはどうすればよいですか?