双星号是否包含当前目录?
Does double asterisk include the current directory?
下面的问题问What do double-asterisk (**) wildcards mean?
那里的许多答案表明 **
包括当前目录和子目录。
但是,当我在 bash 控制台中对此进行测试时,它似乎只列出了子目录中的文件。
以下都只列出子目录文件
$ find **/*.md
docs/architecture.md
docs/autodetect.md
# ...
$ ls -d **/*.md
docs/architecture.md
docs/autodetect.md
# ...
尽管当前目录下有.md文件
$ ls -d *.md
CODE_OF_CONDUCT.md CONTRIBUTING.md README.md SECURITY.md
我是否误解了所引用问题的答案,或者我是否错误地测试了模式?
如何确定脚本中的命令对当前目录和子目录中的文件都起作用?
需要打开globstar
选项才能启用**/
的特殊解释。否则,只有两个 *
连续的 glob 与当前目录不匹配。
When the globstar
shell option is enabled, and *
is used in a filename expansion context, two adjacent *
s used as a single pattern will match all files and zero or more directories and subdirectories. If followed by a /
, two adjacent *
s will match only directories and subdirectories.
这是默认行为 (shopt -u globstar
):
$ ls **/*.md
docs/architecture.md docs/autodetect.md
这是设置后的结果 (shopt -s globstar
):
$ shopt -s globstar
$ ls **/*.md
CODE_OF_CONDUCT.md CONTRIBUTING.md README.md SECURITY.md docs/architecture.md docs/autodetect.md
下面的问题问What do double-asterisk (**) wildcards mean?
那里的许多答案表明 **
包括当前目录和子目录。
但是,当我在 bash 控制台中对此进行测试时,它似乎只列出了子目录中的文件。 以下都只列出子目录文件
$ find **/*.md
docs/architecture.md
docs/autodetect.md
# ...
$ ls -d **/*.md
docs/architecture.md
docs/autodetect.md
# ...
尽管当前目录下有.md文件
$ ls -d *.md
CODE_OF_CONDUCT.md CONTRIBUTING.md README.md SECURITY.md
我是否误解了所引用问题的答案,或者我是否错误地测试了模式?
如何确定脚本中的命令对当前目录和子目录中的文件都起作用?
需要打开globstar
选项才能启用**/
的特殊解释。否则,只有两个 *
连续的 glob 与当前目录不匹配。
When the
globstar
shell option is enabled, and*
is used in a filename expansion context, two adjacent*
s used as a single pattern will match all files and zero or more directories and subdirectories. If followed by a/
, two adjacent*
s will match only directories and subdirectories.
这是默认行为 (shopt -u globstar
):
$ ls **/*.md
docs/architecture.md docs/autodetect.md
这是设置后的结果 (shopt -s globstar
):
$ shopt -s globstar
$ ls **/*.md
CODE_OF_CONDUCT.md CONTRIBUTING.md README.md SECURITY.md docs/architecture.md docs/autodetect.md