我知道有一个类似于的操作符*
,不同之处在于它可以作用于所有子目录。
假设您有一个文件夹结构:
.
├── bar
│ ├── foo
│ │ └── baz
│ │ └── hurz
│ │ └── lolz
│ │ └── hello.txt
│ └── poit.txt
└── fnord.txt
然后ls
用一颗星*
列出:
$ ls *.txt
fnord.txt
我希望双星号运算符**
能够处理子文件夹,但它还不完整。我知道这可以工作,因为我在另一台机器上启用了它,但我忘了怎么用。
$ ls **/*.txt
bar/poit.txt
我期望输出如下所示:
ls **/*.txt
bar/foo/baz/hurz/lolz/hello.txt bar/poit.txt fnord.txt
如何**
调用操作员以及如何正确激活它?
答案1
您正在寻找 bash 版本 4 中引入的 globstar shell 选项。
如果你不确定正在运行哪个版本,可以通过以下方式测试:
$ echo $BASH_VERSION
4.4.12(1)-release
通过以下方式检查是否已启用:
$ shopt globstar
默认为off
。如果你想使用它,你必须启用它:
$ shopt -s globstar
然后它就会按预期工作。您可能希望将其添加到您的,.bashrc
以便它在新的 shell 中始终启用。
要禁用它:
$ shopt -u globstar
请help shopt
参阅详情。