Глобализация с помощью ls для поиска всех файлов, соответствующих определенному шаблону

Я пытаюсь найти все файлы PDF в какой-либо папке и любой подпапке, только в терминале, а не в в сценарии. Я также новичок в Linux, поэтому извиняюсь, если я пропустил что-то очевидное или, возможно, жизненно важное для диагностики моей конкретной проблемы.

Я использую bash 4.1.5 (1) -release (i486-pc-linux-gnu) и поинтересовался в Google о выражениях glob и extglob, и, похоже, синтаксис, который я должен использовать,

$ ls **.pdf

Однако ничего не найдено, поскольку в текущей папке ./ нет файла, соответствующего шаблону *. Pdf ; похоже, он хочет читать ** как * :

ls: cannot access **.pdf: No such file or directory

Есть PDF-файлы в другом месте, в подпапках от 1 до 5 (в частности, в в каждой подпапке 1 глубиной), некоторые из которых я могу увидеть, проверив

$ ls */*.pdf

Следовательно, ls , похоже, работает правильно. Его руководство кажется не очень полезным, поскольку все, что я видел, может быть полезно, если вызвать ls с флагом -R , который не решает проблему ни в одном из вышеупомянутые случаи.

Я пробовал использовать шаблоны extglob (не забудьте включить их с помощью shopt ). Я могу видеть свои файлы глубины 1 с помощью ls * / *? (.) Pdf , но я ничего не вижу с помощью ls. * (/ *) Pdf или ] ls. * (/ *).pdf , даже из подкаталога, где есть файлы PDF.

Я читал в другом месте (со ссылкой на файл .gitignore в репозитории git), что шаблон ** работает не для всех.

Может ли это повлиять на меня, и как я могу исправить это (в идеале без привилегий суперпользователя)? Может ли эта (или связанная с этим проблема) также повлиять на функциональность extglob?

11
задан Nick Loughlin 8 February 2012 в 15:41
поделиться