globstar: `**string*` が `**/*string*` サブディレクトリに入っていません。

globstar: `**string*` が `**/*string*` サブディレクトリに入っていません。

与えられた文字列と一致する(サブ)ディレクトリのファイルセットは次のとおりです。

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/

おすすめ記事