Команда find производит поиск файлов и папок на основе заданных вами критериев и позволяет выполнять действия с результатами поиска.
Синтаксис команды find:
find directory-to-search criteria action
Где:
Следующая команда ищет файл s.txt в текущем каталоге:
find . -name "s.txt"
Где:
В данном случае критерий -name учитывает только символы нижнего регистра и файл S.txt не появиться в результатах поиска. Чтобы убрать чувствительность к регистру необходимо использовать –iname.
find . -iname "s.txt"
Для поиска всех изображений c расширением .png нужно использовать шаблон подстановки *.png:
find . -name "*.png"
Можно использовать название каталога для поиска. Например, чтобы с помощью команды find найти все png изображения в каталоге home:
find /home -name "*.png"
Критерий -type позволяет искать файлы по типу, которые бывают следующих видов:
Например, указав критерий -type d будут перечислены только каталоги:
find . -type d
Допустим, что вам необходимо найти все большие файлы. Для таких ситуаций подойдет критерий -size.
В данном случае поиск выведет все файлы более 1 Гб (+1G):
find . -size +1G
Единицы измерения файлов:
Критерий -empty позволяет найти пустые файлы и каталоги:
find . -empty
Критерий -cmin позволяет искать файлы и каталоги по времени изменения. Для поиска всех файлов, измененных за последний час (менее 60 мин), нужно использовать -60:
find . -cmin -60
Для поиска файлов, которые наоборот были изменены в любое время кроме последнего часа необходимо использовать +60:
find . -cmin +60
Критерий -atime позволяет искать файлы по времени последнего доступа:
find . -atime +180
Таким образом можно найти файлы, к которым не обращались последние полгода (180 дней)
Опция –user username дает возможность поиска всех файлов и каталогов, принадлежащих конкретному пользователю:
find /home -user sensei
Критерий -perm – ищет файлы по определенному набору разрешений.
find /home -perm 777
Для объединения нескольких критериев в одну команду поиска можно применять операторы: -and -or -not Например, чтобы найти файлы размером более 1 Гбайта пользователя sensei необходимо ввести следующую команду:
find /home -user sensei -and -size +1G
Если файлы могут принадлежать не только пользователю sensei, но и пользователю khasan, а также быть размером более 1 Гбайта.
find /home \( -user khasan -or -user sensei \) -and -size +1G
Перед скобками нужно поставить обратный слеш «\».
К команде find можно добавить действия, которые будут произведены с результатами поиска:
Первый полезен, когда необходимо найти и удалить все пустые файлы, например:
find . -empty -delete
Перед удалением лучше лишний раз себя подстраховать. Для этого можно запустить команду с действием по умолчанию -print. exec действие является особенным и позволяет выполнить команду по вашему усмотрению в результатах поиска:
-exec command {} \;
Где:
С помощью –exec можно написать альтернативу команде –delete и применить ее к результатам поиска:
find . -empty -exec rm {} \;
Другой пример использования действия -exec:
find . -name "*.jpg" -exec cp {} /backups/fotos \;
Таким образом можно скопировать все .jpg изображения в каталог backups/fotos