Комбинирование нескольких критериев поиска
Команда find
становится еще более мощной, когда вы комбинируете несколько критериев поиска. Вы можете использовать логические операторы для создания сложных шаблонов поиска.
Использование логики AND
По умолчанию, когда вы указываете несколько критериев, find
использует логику AND, то есть все условия должны быть истинными. Например, чтобы найти все текстовые файлы размером более 100 байт:
find ~/project/files -type f -name "*.txt" -size +100c
Эта команда находит файлы, которые являются одновременно текстовыми файлами И размером более 100 байт.
Использование логики OR с помощью -o
Для использования логики OR вы можете использовать опцию -o
. Например, чтобы найти файлы, которые являются либо текстовыми файлами, либо PDF-файлами:
find ~/project/files -type f \( -name "*.txt" -o -name "*.pdf" \)
Обратите внимание на использование скобок, которые должны быть экранированы обратными слешами. Эта команда находит файлы, которые соответствуют любому из условий.
Результат должен включать:
/home/labex/project/files/documents/report.txt
/home/labex/project/files/documents/notes.txt
/home/labex/project/files/documents/important_report.txt
/home/labex/project/files/documents/exact_size.txt
/home/labex/project/files/documents/project.pdf
Использование логики NOT с помощью !
Для отрицания условия используйте оператор !
. Например, чтобы найти все файлы, которые не являются текстовыми файлами:
find ~/project/files -type f ! -name "*.txt"
Эта команда находит все файлы, которые НЕ имеют расширение .txt.
Сложные примеры
Попробуем несколько более сложных комбинаций. Например, чтобы найти все файлы, которые:
- Являются либо JPG, либо PNG-изображениями И
- Размером более 0 байт
find ~/project/files -type f \( -name "*.jpg" -o -name "*.png" \) -size +0c
Чтобы найти все файлы в каталоге documents
, которые не являются PDF-файлами:
find ~/project/files/documents -type f ! -name "*.pdf"
Создадим несколько дополнительных файлов, чтобы продемонстрировать более сложный поиск:
## Create some large and small image files
echo "This is a large JPG file" > ~/project/files/images/large_image.jpg
for i in {1..50}; do
echo "Adding content to make this file larger." >> ~/project/files/images/large_image.jpg
done
touch ~/project/files/images/empty_image.png
Теперь найдем все изображения (JPG или PNG), которые либо пустые, либо размером более 1 КБ:
find ~/project/files/images -type f \( -name "*.jpg" -o -name "*.png" \) \( -size 0 -o -size +1k \)
Эта сложная команда демонстрирует, как можно создавать сложные критерии поиска, комбинируя несколько условий с помощью логических операторов.