Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

14 примеров практического использования команды find в Linux

Оригинал: 14 Practical Examples of Linux Find Command for Beginners
Автор: Himanshu Arora
Дата публикации: 22 марта 2017 г.
Перевод: А.Панин
Дата перевода: 24 апреля 2017 г.

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

Примечание: при рассмотрении примеров использования команды 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

Вы можете передать номер структуры inode команде find для поиска соответствующего ей файла (если таковой существует). Для доступа к данной функции может использоваться параметр -inum, причем в качестве его параметра должен передаваться номер структуры inode.

Это пример использования данной команды:

Совет: вы можете получить номер структуры inode, воспользовавшись командой ls -li.

14. Поиск файлов на основе времени последнего доступа

Команда find также позволяет осуществлять поиск файлов на основе времени последнего доступа к ним - вы можете сообщить утилите о том, что нужно вывести имена файлов, которые были открыты N минут назад. Для доступа к этой функции может использоваться параметр -amin.

Например, следующая команда позволяет осуществить поиск файлов с расширением .txt, присутствующих в текущей директории, которые были открыты 1 минуту назад:

$ find -amin 1 -name "*.txt"

Заключение

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