find — консольная утилита для поиска файлов по имени и другим свойствам, может производить поиск в одном или нескольких каталогах с использованием критериев (заданных пользователем, также поддерживаются регулярные выражения) и позволяет применять пользователю определённые действия ко всем найденным файлам. Одна из утилит пакета Findutils (утилиты для поиска файлов).
find имеет множество опций (ключей), оторые можно посмотреть вызвав справку приложения (-n / --help). Наиболее полезной (для меня) и довольно регулярно используемой оказалась возможность поиска файлов, которые были модифицированы/созданы недавно и/или за какой-либо заданный промежуток времени. Например, при изменении настройки системы, можно забыть где именно и какие были сохранены/изменены. Или если возникнет необходимость проверить появились/изменялись ли и когда именно файлы.
Чтобы вывести список файлов во всей файловой системе, изменённых в течение последней минуты используется команда:
find / -mmin -1 -print
Вывести список файлов во всей файловой системе, которые были изменены более 30 дней назад:
find / -mtime +30 -print
Чтобы найти недавно модифицированные файлы в каталоге /etc и его подкаталогах, отсортированные в обратном порядке (файл измененный последним, будет показан первым), используется команда вида:
find /etc -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r
Вывод по окончании выполнения команды покажет отсортированный список вместе с их расположением в файловой системе и временем последнего изменения. Если же планируется проверить новые каталоги, надо использовать команду без опции -type f:
find /etc -printf '%TY-%Tm-%Td %TT %p\n' | sort -r
Поиск файлов, которые были модифицированы в последний час в домашнем каталоге и во всех его подкаталогах нужно выполнить (к примеру если надо узнать то скачано веб-браузером):
find ~/ -type f -mmin -60
Поиск файлов, которые были модифицированы в последние 3 дня в домашнем каталоге и во всех его подкаталогах нужно выполнить:
find ~/ -type f -mtime -3
Поиск файлов, которые были модифицированы в последние 3 дня в домашнем каталоге и во всех его подкаталогах, глубиной до 3 уровня нужно выполнить:
find ~/ -type f -mtime -3 -depth -3
Также можно задать диапазон времени модификации. Поиск файлов в домашнем каталоге и во всех его подкаталогах, которые были модифицированы в последние 7 дней, но не позднее чем 3 дня назад:
find ~/ -type f -mtime -7 ! -mtime -3
Все эти команды выводят только путь к найденным файлам, можно также детализировать вывод информации с помощью опции -exec. Поиск файлов в домашнем каталоге и во всех его подкаталогах, которые были модифицированы в последние 60 минут и полный вывод атрибутов файлов:
find ~/ -type f -mmin -60 -exec ls -al {} \;
В качестве альтернативы вы можете использовать для этого команду xargs:
find ~/ -type f -mmin -60 | xargs ls -l
Эти команды найдут также файлы, созданные в заданный промежуток времени. Если необходимо найти все битые ссылки (т.е. ссылки которые указывают на файлы, которых уже не существует), поможет комманда:
find ~/ -type l | while read link; do [ -e `readlink $link` ] || echo $link; done
Можно удалить их:
find ~/ -type l | while read link; do [ -e `readlink $link` ] || echo $link; done|xargs rm -f
Или:
find ~/ -type l | while read link; do [ -e `readlink $link` ] || rm -f $link; done
Можно перенести их куда-нибудь (например в каталог ~/мусор):
find ~/ -type l | while read link; do [ -e `readlink $link` ] || mv $link ~/мусор; done
Поиск файлов в домашнем каталоге содержащих нужный текст в названии, изменённых за последние 30 дней:
find ~/ -name *текст* -mtime +30 -print
Что бы найти файлы в домашнем каталоге с одинаковыми именами и количество повторений нужно выполнить:
find ~/ -type f -printf '%f\n' | sort | uniq -dc
В заключении краткий список основных опций (ключей):
- -name — искать по имени файла, при использовании подстановочных образцов параметр заключается в кавычки.
- -type — тип искомого: f=файл, d=каталог, l=ссылка (link), p=FIFO (First In, First Out), s=сокет.
- -user — владелец: имя пользователя или UID.
- -group — владелец: группа пользователя или GID.
- -perm — указываются права доступа.
- -size — размер: указывается в 512-байтных блоках или байтах (признак байтов — символ «c» за числом).
- -atime — время последнего обращения к файлу.
- -ctime — время последнего изменения владельца или прав доступа к файлу.
- -mtime — время последнего изменения файла.
- -newer другой_файл — искать файлы созданные позже, чем другой_файл.
- -delete — удалять найденные файлы.
- -ls — генерирует вывод как команда ls -dgils.
- -print — показывает на экране найденные файлы.
- -exec command {} \; — выполняет над найденным файлом указанную команду; обратите внимание на синтаксис.
- -ok — перед выполнением команды указанной в -exec, выдаёт запрос.
- -depth или -d — начинать поиск с самых глубоких уровней вложенности, а не с корня каталога.
- -maxdepth — максимальный уровень вложенности для поиска. «-maxdepth 0» ограничивает поиск текущим каталогом.
- -prune — используется, когда вы хотите исключить из поиска определённые каталоги.
- -mount или -xdev — не переходить на другие файловые системы.
- -regextype тип — указание типа используемых регулярных выражений.
- -P — не разворачивать символические ссылки (поведение по умолчанию).
- -L — разворачивать символические ссылки.
Дополнительные материалы:
Расширенные возможности использования команды find в UNIX
Комментариев: 1 RSS
1VYanchuk16-02-2016 16:59
Статья по теме функций и характеристик Find на CentOS //shneider-host.ru/blog/find-obzor-funkciy-i-harakteristik-na-centos.html
Вы можете войти под своим логином или зарегистрироваться на сайте.