На этот вопрос уже есть ответ:
Я знаю, что существует оператор, похожий на *
, с той лишь разницей, что он работает во всех подкаталогах.
Предположим, у вас есть структура папок:
.
├── 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
Как вызывается оператор **
и как его правильно активировать?
Вы ищете опцию оболочки globstar, которая была представлена в версии 4 удара.
Если не уверенный, какая версия Вы выполняете Вас, можно протестировать это через:
$ echo $BASH_VERSION
4.4.12(1)-release
Проверьте, включают ли через это:
$ shopt globstar
Это принимает значение по умолчанию к off
. Если Вы хотите использовать его, необходимо включить его:
$ shopt -s globstar
Затем это будет работать как ожидалось. Вы могли бы хотеть добавить это к Вашему .bashrc
чтобы это всегда включалось в новых оболочках.
Отключить его:
$ shopt -u globstar
Посмотрите help shopt
для деталей.