Как мы можем найти файлы определенного типа, например файлы doc pdf, присутствующие во вложенных каталогах.
команда, которую я пробовал:
$ ls -R | grep .doc
, но если есть имя файла, например alok.doc.txt
, команда отобразит и это, что, очевидно, не то, что я хочу. Какую команду следует использовать вместо этого?
Если вам удобнее работать с "ls" и "grep", вы можете сделать то, что хотите, используя регулярное выражение в команде grep (завершающий символ '$' указывает, что .doc должен быть в конце строки. Это исключит "file.doc.txt"):
ls -R |grep "\.doc$"
Подробнее об использовании grep с регулярными выражениями в the man.
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