Linux -- это интересно

find


find — консольная утилита для поиска файлов по имени и другим свойствам, может производить поиск в одном или нескольких каталогах с использованием критериев (заданных пользователем, также поддерживаются регулярные выражения) и позволяет применять пользователю определённые действия ко всем найденным файлам.

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 — разворачивать символические ссылки.

Дополнительные материалы:

Поиск в unix. Часть1

Поиск в unix. Часть2

Поиск файлов с помощью find

Расширенные возможности использования команды find в UNIX

Комментариев: 1 RSS

Статья по теме функций и характеристик Find на CentOS https://shneider-host.ru/blog/find-obzor-funkciy-i-harakteristik-na-centos.html

Оставьте комментарий!
Используйте нормальные имена.Войти через loginza
Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



 
(обязательно)