Библиотека сайта rus-linux.net
14 примеров практического использования команды find в Linux
Оригинал: 14 Practical Examples of Linux Find Command for Beginners
Автор: Himanshu Arora
Дата публикации: 22 марта 2017 г.
Перевод: А.Панин
Дата перевода: 24 апреля 2017 г.
Примечание: при рассмотрении примеров использования команды find в данной статье мы будем работать со следующими файлами во всех случаях, когда не будет приведено явного указания имен рассматриваемых файлов.
1. Вывод списка имен всех файлов из текущей директории и ее поддиректорий
Команда find позволяет быстро вывести список имен всех файлов из текущей директории и ее поддиректорий. Для этого достаточно выполнить рассматриваемую команду без каких-либо аргументов или параметров.
$ find
А это вывод команды:
Разумеется, вам придется вам придется передать полный путь к интересующей вас директории, если она не будет текущей директорией.
2. Поиск файлов по их именам
Если вам понадобится, вы можете использовать команду find для поиска файла по его имени. Параметр -name
позволяет сделать это. А это синтаксис команды:
$ find [путь-к-директории] -name [имя-файла]
Например, следующая команда позволяет осуществить поиск в текущей директории файла с именем "testfile1.txt"
:
$ find . -name testfile1.txt
Это ее вывод:
Аналогичным образом вы можете осуществить поиск файла в других директориях. В том случае, если директория, в которой может находиться файл, является поддиректорией вашей текущей директории, вам не придется что-либо делать, так как команда find автоматически осуществляет поиск файлов во всех поддиректориях текущей или заданной директории.
Но в том случае, если нужно осуществить поиск файла в совершенно не связанной с текущей директорией директории, вам придется передать полный путь к этой директории. Например, следующая команда позволяет осуществить поиск файла в домашних директориях всех пользователей:
$ find /home -name testfile1.txt
3. Поиск файлов определенных типов
Команда find также позволяет осуществлять поиск файлов заданных типов в заданных директориях (и их поддиректориях). Например, следующая команда позволяет осуществить поиск всех файлов с расширением .txt
в вашей текущей директории:
$ find . -name "*.txt"
Если вы не знаете, символ *
является символом-шаблоном. Для ознакомления с дополнительной информацией об этих символах обратитесь к
4. Поиск файлов по их именам без учета регистра
По умолчанию команда find осуществляет поиск файлов с учетом регистра их имен (она рассматривает буквенные символы в верхнем и нижнем регистрах как отличные). Но если вам нужно, вы можете сообщить команде о необходимости осуществления поиска файлов без учета регистра их имен. Вы можете сделать это, воспользовавшись параметром -iname
.
$ find -iname [имя-файла]
Например,
$ find -iname testfile1.txt
Это вывод данной команды:
5. Вывод имен файлов, не соответствующих поисковому шаблону
Если вам нужно, вы можете даже сообщать команде о необходимости вывода имен файлов, которые не соответствуют поисковому шаблону (эта функция называется инвертированным поиском). Вы можете воспользоваться данной функцией посредством оператора !
или -not
.
Например.
$ find . -not -name "*.txt"
Это вывод данной команды:
Очевидно, что в результате исполнения команды были выведены имена всех файлов с расширениями, отличными от .txt
.
6. Ограничение глубины поиска файлов
Команда find также позволяет ограничить глубину поиска файлов определенным количеством поддиректорий. Для этого предназначен параметр -maxdepth
.
Например, предположим, что имеется следующая структура директорий:
Теперь, если вам нужно осуществить поиск файла лишь до поддиректории "find"
(другими словами, проигнорировать поддиректорию "howtoforge"
), вы можете воспользоваться следующей командой:
$ find . -maxdepth 3 -name "*.txt"
В данном случае параметр "-maxdepth 3"
сообщает команде find о том, что необходимо исследовать лишь три уровня поддиректорий, причем на первом уровне расположена ваша текущая директория (или рабочая директория).
Это вывод данной команды:
Помимо maxdepth
существует еще один параметр под названием mindepth
(использование: mindepth [N]
). Этот параметр сообщает команде find о том, что следует осуществить переход в поддиректории уровня N
перед началом поиска.
Например,
$ find . -mindepth 3 -name "*.txt"
В результате поиск файлов будет осуществляться в директории find и ее поддиректориях.
Подводя итог всему сказанному, следует отметить, что если вам нужно осуществить поиск файла с расширением .txt
в поддиректориях с уровня 2 по уровень 4, вы можете воспользоваться следующей командой:
$ find -mindepth 2 -maxdepth 4 -name "*.txt"
7. Вывод имен пустых файлов
При необходимости вы можете использовать команду find для вывода списка всех пустых файлов в определенной директории (и ее поддиректориях). Для этого предназначен параметр -empty
.
Например, для вывода списка всех пустых файлов из вашей текущей директории вы можете воспользоваться следующей командой:
$ find . -empty
8. Поиск файлов, принадлежащих определенной группе пользователей
Команда find также позволяет осуществлять поиск файлов, принадлежащих определенной группе пользователей, благодаря поддержке параметра -group
. Например, следующая команда позволяет вывести список всех файлов из вашей текущей директории и ее поддиректорий, принадлежащих группе пользователей "howtoforge"
.
$ find . -group howtoforge -name "*.txt"
Это вывод приведенной выше команды в моем случае:
9. Поиск файлов, принадлежащих определенному пользователю
Команда find позволяет осуществлять поиск файлов по имени их владельца благодаря поддержке параметра -user
. Например, следующая команда выведет имена всех файлов с расширением .txt
(присутствующих в вашей текущей директории), владельцем которых является пользователь с именем "himanshu"
:
$ find . -user himanshu -name "*.txt"
10. Поиск недавно модифицированных файлов
Команда find позволяет осуществлять поиск недавно модифицированных файлов. Для этой цели предназначен параметр -mmin
. При использовании данного параметра необходимо передавать числовое значение, соответствующее количеству минут с момента модификации.
Например, если вы хотите осуществить поиск файлов с расширением .txt
(в вашей текущей директории), которые были модифицированы 1 минуту назад, вы можете использовать следующую команду:
$ find . -mmin 1 -name "*.txt"
11. Поиск файлов, модифицированных после указанного файла
Да, команда find позволяет осуществлять поиск даже тех файлов, которые были модифицированы после определенного файла. Для доступа к данной функции должен использоваться параметр -newer
, после которого должно передаваться имя файла (с временем модификации которого будет сравниваться время модификации каждого файла, находящегося в текущей директории).
Пример команды:
$ find . -newer ./examples/find/howtoforge/old.txt -name "*.txt"
12. Вывод имен всех поддиректорий директории
Помимо всех описанных, существует параметр команды find, позволяющий вывести имена всех поддиректорий текущей директории. Это параметр -type
, в качестве значения которого должен передаваться символ d
.
Например,
$ find -type d
Это вывод данной команды в моем случае:
Помимо упомянутого символа d
, существуют и другие символы, которые могут передаваться в качестве значения параметра -type
. Для ознакомления с их списком следует обратиться к странице руководства.
13. Поиск файлов по номерам соответствующих структур inode
Вы можете передать номер структуры -inum
, причем в качестве его параметра должен передаваться номер структуры inode.
Это пример использования данной команды:
Совет: вы можете получить номер структуры inode, воспользовавшись командой ls -li
.
14. Поиск файлов на основе времени последнего доступа
Команда find также позволяет осуществлять поиск файлов на основе времени последнего доступа к ним - вы можете сообщить утилите о том, что нужно вывести имена файлов, которые были открыты N
минут назад. Для доступа к этой функции может использоваться параметр -amin
.
Например, следующая команда позволяет осуществить поиск файлов с расширением .txt
, присутствующих в текущей директории, которые были открыты 1 минуту назад:
$ find -amin 1 -name "*.txt"
Заключение
Рассмотренные в статье примеры должны помочь читателю в понимании базового принципа работы команды find, а также послужить источником информации о некоторых полезных параметрах данной команды. Попробуйте повторить описанные команды в своей системе и не забудьте заглянуть на соответствующую страницу руководства.