Подтвердить что ты не робот

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

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

Я попытался:

$ ls -R | grep .doc

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

4b9b3361

Ответ 1

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

ls -R |grep "\.doc$"

Дополнительная информация об использовании grep с регулярными выражениями в man.

Ответ 2

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

Ответ 3

Некоторые из других методов, которые можно использовать:

echo *.{pdf,docx,jpeg}

stat -c %n * | grep 'pdf\|docx\|jpeg'

Ответ 4

Аналогично, если вы предпочитаете использовать подстановочный знак * (не совсем похожий на предложения регулярного выражения), вы можете просто использовать ls с флагом -l для отображения одного файла на строку (например, grep) и -R как у вас. Затем вы можете указать файлы, которые хотите найти, с помощью *.doc И.Е. Либо

ls -l -R *.doc

или если вы хотите, чтобы он отображал файлы на меньшем количестве строк.

ls -R *.doc