
grep
任意のディレクトリの深い場所にあり、/path/to/dir
ファイル名の場所を持つパスを使用したいと思いますfoo
。任意深さのワイルドカードはと思っ**
て試してみました。
grep some_pattern /path/to/dir/**/foo
**
ただし、その部分が単一のディレクトリの深さを表すファイルにのみ一致しているようです。
/path/to/dir/bar/foo
/path/to/dir
ファイル名のあるディレクトリ内の任意の深さのパスを一致させるにはfoo
?
答え1
zshを使用してください。 zshexpn(1) のマニュアルページの「再帰ワイルドカード」セクションで:
'(foo/)#' 形式のパス名コンポーネントは、foo パターンに一致するゼロ個以上のディレクトリで構成されるパスと一致します。
簡単に言えば、 '**/' は '(*/)#' と同じです。したがって、これは現在のディレクトリとサブディレクトリのファイルと一致します。
[...] この形式はシンボリックリンクに従いません。代替「***/」が機能しますが、それ以外は同じです。
これはまた、**
隠されたディレクトリ(名前がドットで始まるディレクトリ)がデフォルトで含まれていないことを意味します。一致させるには、このGLOB_DOTS
オプションを設定するか、Dグローバル修飾子を使用してください。
grep some_pattern /path/to/dir/**/foo(D)
globstar
Bashを使用するには、このオプションを明示的に設定する必要があります**
。
shopt -s globstar
答え2
vinc17の提案に加えて、次のように--include
一緒に使用できます-r option
。
grep -r --include \foo some_pattern /path/to/dir/*.