Поиск файлов в Linux — команда find

Как известно в Linux абсолютно все является файлом, т.е. ко всему можно получить доступ через файловую систему. Поэтому в Linux по умолчанию доступны команды для рекурсивного поиска файлов и директорий по определенным критериям, например команда find.

Команда find

find — команда принимает критерий поиска и возвращает найденные результаты. Например find /путь/до/директории/поиска критерий

wildcard (групповые символы) — могут использоваться для задания критерия поиска. Например, «*» wildcard означает поиск любого символа, т.е. «*.txt» будет искать любые текстовые файлы (файлы с расширением .txt) или «*script» будет искать любой текст где встречается слово script.

Рекурсивный поиск по умолчанию — команда find будет искать рекурсивно, т.е. поиск будет осуществлен в текущей директории и во всех вложенных директориях, вне зависимости от их количества и уровня вложенности.

ctime (change time) — время последнего изменения мета данных (данных о владельце, правах доступа и т.д.)

atime (access time) — время последнего доступа к файлу, чтения или записи.

mtime (modified time) — время последнего изменения содержимого файла.

Примеры использования команды find

Не забывайте, что по умолчанию аргументы суммируются: результаты соответствуют всем введенным критериям. Вы можете указать вариативное соответствие (OR) с помощью -o аргумента.

Показать все файлы в текущей директории

find .

Критерий поиска не задан — будет найдено все содержимое указанной директории. «.» — это текущая директория

Найти все директории содержащие «tmp»

find / -type d -name "tmp

«/» — root директория, т.е. поиск осуществляется по всей файловой системе
-type d — будут возвращены только директории
-name «tmp» — поиск будет осуществлен только по названию содержащиму «tmp»

Найти все имена файлов содержащие текст «ssh» в любом регистре и не включать в результаты директории

find / -type f -iname *ssh*

/ — root директория, т.е. поиск осуществляется по всей файловой системе
-type f — поиск по файлам
-iname — поиск по именам без учета регистра
*ssh* — поиск текста «ssh», который может быть находится в любом месте

Найти все имена файлов содержащие текст «ssh» в любом регистре и не включать в результаты директории, а также любые .gz файлы или файлы содержащие «sshd» в имени

find / -type f -iname *ssh* ! -name "*.gz" ! -name "sshd*"

! — логическое «NOT», т.е. исключение определенных результатов из возвращаемого результата предыдущего критерия

Найти все имена файлов содержащие текст «ssh» в любом регистре, которые являются .gz файлами или содержат «sshd*» в имени, игнорировать имена директорий

find / -type f -iname *ssh* -name "*.gz" -o -name "sshd*"

-o — логическое «OR», возвращает результаты указанные в дополнительном критерии

Найти все файлы не принадлежащие root пользователю

find / ! -user root -type f

Найти все файлы, которые были изменены за последние 2 дня

find / -ctime -2

-ctime -2 — последние два дня, вместо знака минус — можно было использовать +, тогда были возвращены все файлы и директории измененные до последних двух дней. Подобный подход используется также для atime и  mtime. Чтобы указать минуты вместо дней можно воспользоваться аргументом cmin

Найти все файлы, размер которых больше больше 1 Мегабайта, но меньше 3 Мегабайт

find / -size +1M -size -3M

+ — знак плюс означает «больше чем», а — знак минус означает «меньше чем

Сетевые ОС, функции и компоненты сетевых операционных систем
Права доступа в Linux: команды ls, chmod, chown, chgrp + примеры
ITandLife.ru