Как включить оператор двойной звезды ** (глобстар)? [дубликат]

Я знаю, что существует оператор, похожий на * , с той лишь разницей, что он работает во всех подкаталогах.

Предположим, у вас есть структура папок:

.
├── 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

Как вызывается оператор ** и как его правильно активировать?

2
задан 6 March 2018 в 19:30

1 ответ

Вы ищете опцию оболочки globstar, которая была представлена в версии 4 удара.

Если не уверенный, какая версия Вы выполняете Вас, можно протестировать это через:

$ echo $BASH_VERSION
4.4.12(1)-release

Проверьте, включают ли через это:

$ shopt globstar

Это принимает значение по умолчанию к off. Если Вы хотите использовать его, необходимо включить его:

$ shopt -s globstar

Затем это будет работать как ожидалось. Вы могли бы хотеть добавить это к Вашему .bashrc чтобы это всегда включалось в новых оболочках.

Отключить его:

$ shopt -u globstar

Посмотрите help shopt для деталей.

5
ответ дан 2 December 2019 в 01:54

Другие вопросы по тегам:

Похожие вопросы: