与えられた文字列と一致する(サブ)ディレクトリのファイルセットは次のとおりです。
find -name 'string' | sort
./1/2/3/4/string
./1/2/3/string
./1/2/string
./1/string
./string
globstar
次のファイルを一致させるために使用する理由
ls **string
string
中にディレクトリを実行できません。
ls **/string
1/2/3/4/string 1/2/3/string 1/2/string 1/string string
成功しましたか?ページの説明を私が理解したところによると、man
(サブ)ディレクトリと一致する必要があります。そうではありませんか?
このような質問は通常重複して表示されます。「ls*、ls**、およびls***の結果」しかし、そこへの答えはそれだけを扱い、ディレクトリを介してls **
繰り返されます。二重アスタリスクの後に文字列が続くようですglobstar
。
実行GNU bash v.4.4.19(1)
対象mint 19
~からman bash
グローバルスター
設定されている場合、パス名拡張コンテキスト**で使用されるパターンは、すべてのファイルとゼロ以上のディレクトリとサブディレクトリと一致します。パターンの後に/が続くと、ディレクトリとサブディレクトリのみが一致します。
ベストアンサー1
これはKshとZshでも同様です。
$ mkdir -p a/b/cdir
$ touch a/b/cfile
$ ksh -c 'set -o globstar; echo **c*'
**c*
$ zsh -c 'echo **c*'
zsh:1: no matches found: **c*
パターンマッチングでは、Bashマニュアルは次のように述べています。
globstar
シェルオプションが有効になって*
ファイル名拡張コンテキストで使用される場合、単一パターン*
として使用される2つの隣接するsは、すべてのファイルとゼロ個以上のディレクトリとサブディレクトリと一致します。
「シングルモード」はスラッシュで区切られたセクションなので、シングルモードfoo/**/bar
にあるという意味で理解できますが、**bar
そうではありません。
しかし、これはより明確かもしれません。
パターン全体の後にスラッシュがある場合、パターンはディレクトリにのみ一致します。
$ echo **/c*/
a/b/cdir/