Рекурсивный ls с условиями

16

Почему я не могу использовать такую ​​команду, чтобы найти все PDF-файлы в каталоге и подкаталогах? Как это сделать? (Я использую Bash в Ubuntu)

ls -R *.pdf

РЕДАКТИРОВАТЬ

Как мне тогда удалить все эти файлы?

Tomba
источник

Ответы:

22

Почему я не могу использовать такую ​​команду, чтобы найти все PDF-файлы в каталоге и подкаталогах?

Подстановочный знак *.pdfв вашей команде раскрывается bashдо всех соответствующих файлов в текущем каталоге перед выполнением ls.


Как это сделать? (Я использую Bash в Ubuntu)

найди твой ответ.

find . -name \*.pdf

это рекурсивный список файлов PDF. -inameсовпадение без учета регистра, так

find . -iname \*.pdf

перечисляет все файлы .pdf, включая, например, foo.PDF

Также вы можете использовать ls для ограниченного числа подпапок, например

ls *.pdf */*.pdf

найти все PDF-файлы в подпапках (соответствует bar / foo.pdf, а не bar / foo / asdf.pdf и не foo.PDF).

Если вы хотите удалить файлы, найденные с помощью find, вы можете использовать

find . -iname \*.pdf -delete
Олли
источник
1
На всякий случай, если вам нужен вывод, похожий на ls -lкоманду, с указанием размера файла, владельца, даты и т. Д., Вы можете использовать findэту -lsопцию, например,find . -name \*.pdf -ls
RFVoltolini
2

Как уже говорили другие, найти ответ.

Теперь ответим на другую часть.

  • Как мне тогда удалить все эти файлы?

    находить . -имя * .pdf -exec rm {} \;

Должен сделать это.

Мэтт Н
источник
2
Вы должны процитировать свой шар, чтобы предотвратить его преждевременное расширение.
Приостановлено до дальнейшего уведомления.
1

Используйте find вместо ls

find . -name '*.pdf'
Vartec
источник