Подстановочный знак для произвольной глубины

Я хочу использовать grep где пути – произвольная глубина в каталоге /path/to/dir и имеет имя файла foo . Я думал, что шаблон для произвольной глубины ** , и я попробовал

 grep some_pattern /path/to/dir/**/foo 

но похоже, что они соответствуют только файлам, где ** часть представляет собой единую глубину каталога, такую ​​как

 /path/to/dir/bar/foo 

Как я могу сопоставлять пути для произвольной глубины, находящиеся в каталоге /path/to/dir и имеет имя файла foo ?

2 Solutions collect form web for “Подстановочный знак для произвольной глубины”

Используйте zsh. На странице руководства zshexpn (1) в разделе «Рекурсивное глобусирование»:

Компонент pathname формы (foo /) # 'соответствует пути, состоящему из нулей или более каталогов, соответствующих шаблону foo.

Как сокращенное выражение '** /' эквивалентно '(* /) #'; обратите внимание, что это соответствует файлам в текущем каталоге, а также в подкаталогах.

[…] Эта форма не соответствует символическим ссылкам; альтернативная форма «*** /» делает, но в остальном идентична.

Это также означает, что ** не включает скрытые каталоги (чье имя начинается с точки) по умолчанию. Если вы хотите их сопоставить, либо установите параметр GLOB_DOTS либо используйте квалификатор D glob:

 grep some_pattern /path/to/dir/**/foo(D) 

С помощью bash вам необходимо явно указать параметр globstar чтобы сделать работу ** :

 shopt -s globstar 

В дополнение к предложению vinc17 вы можете использовать --include сочетании с -r option , например:

 grep -r --include \foo some_pattern /path/to/dir/*. 
  • количество строк на всех скриптах PHP в моем веб-корте с помощью wc
  • Рекурсивно обновить все временные отметки «Дата-измененные» папки для даты новейшего файла
  • Как рекурсивно удалить разрешения на выполнение из файлов, не касаясь папок?
  • Переименование файлов рекурсивно в sh
  • Переместить все файлы с определенным расширением из нескольких подкаталогов в один каталог
  • id3v2 используется рекурсивно в командной строке?
  • Манипулировать имя файла с помощью команды find
  • Рекурсивно перечислять файлы, содержащие символ подчеркивания в имени файла
  • Linux и Unix - лучшая ОС в мире.