我知道有一个类似于 的运算符*,不同之处在于它适用于所有子目录。
假设您有一个文件夹结构:
.
??? bar
? ??? foo
? ? ??? baz
? ? ??? hurz
? ? ??? lolz
? ? ??? hello.txt
? ??? poit.txt
??? fnord.txt
Run Code Online (Sandbox Code Playgroud)
然后ls用单星*将列出:
$ ls *.txt
fnord.txt
Run Code Online (Sandbox Code Playgroud)
我希望双星操作员**能够处理子文件夹,但它还没有完成。我知道这可以工作,因为我在另一台机器上启用了它,但我忘记了如何。
$ ls **/*.txt
bar/poit.txt
Run Code Online (Sandbox Code Playgroud)
我期待输出看起来像:
ls **/*.txt
bar/foo/baz/hurz/lolz/hello.txt bar/poit.txt fnord.txt
Run Code Online (Sandbox Code Playgroud)
如何**调用接线员以及如何正确激活它?
k0p*_*kus 14
您正在寻找 bash 版本 4 中引入的 globstar shell 选项。
如果您不确定正在运行的版本,可以通过以下方式进行测试:
$ echo $BASH_VERSION
4.4.12(1)-release
Run Code Online (Sandbox Code Playgroud)
检查它是否通过以下方式启用:
$ shopt globstar
Run Code Online (Sandbox Code Playgroud)
它默认为off. 如果你想使用它,你必须启用它:
$ shopt -s globstar
Run Code Online (Sandbox Code Playgroud)
然后它将按预期工作。您可能希望将此添加到您.bashrc的,以便在新 shell 中始终启用它。
要禁用它:
$ shopt -u globstar
Run Code Online (Sandbox Code Playgroud)
详情请参阅help shopt。