Как перечислить файлы определенного типа в рекурсивных каталогах в оболочке?

Как мы можем найти файлы определенного типа, например файлы doc pdf, присутствующие во вложенных каталогах.

команда, которую я пробовал:

$ ls -R | grep .doc

, но если есть имя файла, например alok.doc.txt , команда отобразит и это, что, очевидно, не то, что я хочу. Какую команду следует использовать вместо этого?

37
задан P Shved 20 August 2010 в 05:52
поделиться

2 ответа

Если вам удобнее работать с "ls" и "grep", вы можете сделать то, что хотите, используя регулярное выражение в команде grep (завершающий символ '$' указывает, что .doc должен быть в конце строки. Это исключит "file.doc.txt"):

ls -R |grep "\.doc$"

Подробнее об использовании grep с регулярными выражениями в the man.

64
ответ дан 27 November 2019 в 04:14
поделиться

ls вывод команды в основном предназначен для чтения людьми. Для расширенных запросов для автоматической обработки вам следует использовать более мощную команду find :

find /path -type f \( -iname "*.doc" -o -iname "*.pdf" \) 

Как будто у вас есть bash 4.0 ++

#!/bin/bash
shopt -s globstar
shopt -s nullglob
for file in **/*.{pdf,doc}
do
  echo "$file"
done
32
ответ дан 27 November 2019 в 04:14
поделиться
Другие вопросы по тегам:

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