Ответ 1
Вы можете захотеть найти
find . -name '*.pdf' -exec ls -l {} \;
или
find . -name '*.pdf' -ls
где. это ваш текущий рабочий каталог. Функциональность glob поставляется с 4.0+ bash. Расширения glob не переносимы другими словами.
Я пытаюсь найти все файлы PDF в некоторой папке и любой вложенной папке только в терминале, а не в script. Я также совершенно новичок в 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?
Вы можете захотеть найти
find . -name '*.pdf' -exec ls -l {} \;
или
find . -name '*.pdf' -ls
где. это ваш текущий рабочий каталог. Функциональность glob поставляется с 4.0+ bash. Расширения glob не переносимы другими словами.
Параметры extglob
и globstar
необходимы для получения расширенной функциональности из библиотеки glob
; они включаются с помощью утилиты оболочки (shopt
), как описано ниже.
Чтобы использовать globstar
(который вызывает поведение шаблона **
, как описано в руководстве bash), его необходимо активировать (в bash 4.0+) с помощью
shopt -s globstar
и для включения более "функциональных" выражений типа регулярного выражения, таких как ?(ab)
и *(ab)
их полный эффект, используйте
shopt -s extglob
Чтобы снова отключить параметры, укажите -u
вместо s
, для eaxample
shopt -u globstar