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

Содержание
  1. 14 примеров практического использования команды find в Linux
  2. 1. Вывод списка имен всех файлов из текущей директории и ее поддиректорий
  3. 2. Поиск файлов по их именам
  4. 3. Поиск файлов определенных типов
  5. 4. Поиск файлов по их именам без учета регистра
  6. 5. Вывод имен файлов, не соответствующих поисковому шаблону
  7. 6. Ограничение глубины поиска файлов
  8. 7. Вывод имен пустых файлов
  9. 8. Поиск файлов, принадлежащих определенной группе пользователей
  10. 9. Поиск файлов, принадлежащих определенному пользователю
  11. 10. Поиск недавно модифицированных файлов
  12. 11. Поиск файлов, модифицированных после указанного файла
  13. 12. Вывод имен всех поддиректорий директории
  14. 13. Поиск файлов по номерам соответствующих структур inode
  15. 14. Поиск файлов на основе времени последнего доступа
  16. Заключение
  17. Поиск в Linux с помощью команды find
  18. Общий синтаксис
  19. Описание опций
  20. Примеры использования find
  21. Поиск файла по имени
  22. Поиск по дате
  23. По типу
  24. Поиск по правам доступа
  25. Поиск файла по содержимому
  26. С сортировкой по дате модификации
  27. Лимит на количество выводимых результатов
  28. Поиск с действием (exec)
  29. Чистка по расписанию

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

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

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

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

1. Вывод списка имен всех файлов из текущей директории и ее поддиректорий

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

А это вывод команды:

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

2. Поиск файлов по их именам

Если вам понадобится, вы можете использовать команду find для поиска файла по его имени. Параметр -name позволяет сделать это. А это синтаксис команды:

Например, следующая команда позволяет осуществить поиск в текущей директории файла с именем «testfile1.txt» :

Аналогичным образом вы можете осуществить поиск файла в других директориях. В том случае, если директория, в которой может находиться файл, является поддиректорией вашей текущей директории, вам не придется что-либо делать, так как команда find автоматически осуществляет поиск файлов во всех поддиректориях текущей или заданной директории.

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

3. Поиск файлов определенных типов

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

Если вы не знаете, символ * является символом-шаблоном. Для ознакомления с дополнительной информацией об этих символах обратитесь к данному материалу .

4. Поиск файлов по их именам без учета регистра

По умолчанию команда find осуществляет поиск файлов с учетом регистра их имен (она рассматривает буквенные символы в верхнем и нижнем регистрах как отличные). Но если вам нужно, вы можете сообщить команде о необходимости осуществления поиска файлов без учета регистра их имен. Вы можете сделать это, воспользовавшись параметром -iname .

Это вывод данной команды:

5. Вывод имен файлов, не соответствующих поисковому шаблону

Если вам нужно, вы можете даже сообщать команде о необходимости вывода имен файлов, которые не соответствуют поисковому шаблону (эта функция называется инвертированным поиском). Вы можете воспользоваться данной функцией посредством оператора ! или -not .

Читайте также:  Iphone itunes windows mac

Это вывод данной команды:

Очевидно, что в результате исполнения команды были выведены имена всех файлов с расширениями, отличными от .txt .

6. Ограничение глубины поиска файлов

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

Например, предположим, что имеется следующая структура директорий:

Теперь, если вам нужно осуществить поиск файла лишь до поддиректории «find» (другими словами, проигнорировать поддиректорию «howtoforge» ), вы можете воспользоваться следующей командой:

В данном случае параметр «-maxdepth 3» сообщает команде find о том, что необходимо исследовать лишь три уровня поддиректорий, причем на первом уровне расположена ваша текущая директория (или рабочая директория).

Это вывод данной команды:

Помимо maxdepth существует еще один параметр под названием mindepth (использование: mindepth [N] ). Этот параметр сообщает команде find о том, что следует осуществить переход в поддиректории уровня N перед началом поиска.

В результате поиск файлов будет осуществляться в директории find и ее поддиректориях.

Подводя итог всему сказанному, следует отметить, что если вам нужно осуществить поиск файла с расширением .txt в поддиректориях с уровня 2 по уровень 4, вы можете воспользоваться следующей командой:

7. Вывод имен пустых файлов

При необходимости вы можете использовать команду find для вывода списка всех пустых файлов в определенной директории (и ее поддиректориях). Для этого предназначен параметр -empty .

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

8. Поиск файлов, принадлежащих определенной группе пользователей

Команда find также позволяет осуществлять поиск файлов, принадлежащих определенной группе пользователей, благодаря поддержке параметра -group . Например, следующая команда позволяет вывести список всех файлов из вашей текущей директории и ее поддиректорий, принадлежащих группе пользователей «howtoforge» .

Это вывод приведенной выше команды в моем случае:

9. Поиск файлов, принадлежащих определенному пользователю

Команда find позволяет осуществлять поиск файлов по имени их владельца благодаря поддержке параметра -user . Например, следующая команда выведет имена всех файлов с расширением .txt (присутствующих в вашей текущей директории), владельцем которых является пользователь с именем «himanshu» :

10. Поиск недавно модифицированных файлов

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

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

11. Поиск файлов, модифицированных после указанного файла

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

12. Вывод имен всех поддиректорий директории

Помимо всех описанных, существует параметр команды find, позволяющий вывести имена всех поддиректорий текущей директории. Это параметр -type , в качестве значения которого должен передаваться символ d .

Это вывод данной команды в моем случае:

Помимо упомянутого символа d , существуют и другие символы, которые могут передаваться в качестве значения параметра -type . Для ознакомления с их списком следует обратиться к странице руководства.

13. Поиск файлов по номерам соответствующих структур inode

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

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

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

Читайте также:  Показать скрытые файлы mac os big sur

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

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

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

Заключение

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

Источник

Поиск в Linux с помощью команды find

Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.

Общий синтаксис

путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».

набор правил, по которым выполнять поиск.

* по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.

Описание опций

Тип объекта поиска. Возможные варианты:

  • f — файл;
  • d — каталог;
  • l — ссылка;
  • p — pipe;
  • s — сокет.
Опция Описание
-name Поиск по имени.
-iname Регистронезависимый поиск по имени.
-type
-size Размер объекта. Задается в блоках по 512 байт или просто в байтах (с символом «c»).
-mtime Время изменения файла. Указывается в днях.
-mmin Время изменения в минутах.
-atime Время последнего обращения к объекту в днях.
-amin Время последнего обращения в минутах.
-ctime Последнее изменение владельца или прав на объект в днях.
-cmin Последнее изменение владельца или прав в минутах.
-user Поиск по владельцу.
-group По группе.
-perm С определенными правами доступа.
-depth Поиск должен начаться не с корня, а с самого глубоко вложенного каталога.
-maxdepth Максимальная глубина поиска по каталогам. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию, поиск рекурсивный.
-prune Исключение перечисленных каталогов.
-mount Не переходить в другие файловые системы.
-regex По имени с регулярным выражением.
-regextype Тип регулярного выражения.
-L или -follow Показывает содержимое символьных ссылок (симлинк).
-empty Искать пустые каталоги.
-delete Удалить найденное.
-ls Вывод как ls -dgils
-print Показать найденное.
-print0 Путь к найденным объектам.
-exec <> \; Выполнить команду над найденным.
-ok Выдать запрос перед выполнением -exec.

Также доступны логические операторы:

Оператор Описание
-a Логическое И. Объединяем несколько критериев поиска.
-o Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска.
-not или ! Логическое НЕ. Инвертирует критерий поиска.

Полный набор актуальных опций можно получить командой man find.

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

Поиск файла по имени

1. Простой поиск по имени:

find / -name «file.txt»

* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.

2. Поиск файла по части имени:

* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp

3. Несколько условий.

а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:

find . -name «sess_*» -a -name «*cd»

б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:

find . -name «sess_*» -o -name «*cd»

в) Более компактный вид имеют регулярные выражения, например:

find . -regex ‘.*/\(sess_.*cd\)’

* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).

4. Найти все файлы, кроме .log:

find . ! -name «*.log»

* в данном примере мы воспользовались логическим оператором !.

Поиск по дате

1. Поиск файлов, которые менялись определенное количество дней назад:

find . -type f -mtime +60

* данная команда найдет файлы, которые менялись более 60 дней назад.

2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find —version).

а) дате изменения:

find . -type f -newermt «2019-11-02 00:00»

* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.

find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02

* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).

б) дате обращения:

find . -type f -newerat 2019-10-08

* все файлы, к которым обращались с 08.10.2019.

find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01

* все файлы, к которым обращались в октябре.

в) дате создания:

find . -type f -newerct 2019-09-07

* все файлы, созданные с 07 сентября 2019 года.

find . -type f -newerct 2019-09-07 ! -newerct «2019-09-09 07:50:00»

* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50

По типу

Искать в текущей директории и всех ее подпапках только файлы:

* f — искать только файлы.

Поиск по правам доступа

1. Ищем все справами на чтение и запись:

find / -perm 0666

2. Находим файлы, доступ к которым имеет только владелец:

find / -perm 0600

Поиск файла по содержимому

find / -type f -exec grep -i -H «content» <> \;

* в данном примере выполнен рекурсивный поиск всех файлов в директории / и выведен список тех, в которых содержится строка content.

С сортировкой по дате модификации

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r

* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.

Лимит на количество выводимых результатов

Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r | head -n 1

Поиск с действием (exec)

1. Найти только файлы, которые начинаются на sess_ и удалить их:

find . -name «sess_*» -type f -print -exec rm <> \;

* -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.

2. Переименовать найденные файлы:

find . -name «sess_*» -type f -exec mv <> new_name \;

find . -name «sess_*» -type f | xargs -I ‘<>‘ mv <> new_name

3. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:

find . -name «*.tmp» | wc -l

4. Изменить права:

find /home/user/* -type d -exec chmod 2700 <> \;

* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.

5. Передать найденные файлы конвееру (pipe):

find /etc -name ‘*.conf’ -follow -type f -exec cat <> \; | grep ‘test’

* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.

6. Произвести замену в файлах с помощью команды sed:

find /opt/project -type f -exec sed -i -e «s/test/production/g» <> \;

* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.

Чистка по расписанию

Команду find удобно использовать для автоматического удаления устаревших файлов.

Открываем на редактирование задания cron:

0 0 * * * /bin/find /tmp -mtime +14 -exec rm <> \;

* в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00.
* полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.

Источник

Читайте также:  Pyinstaller ��� ������������ linux ��� windows
Оцените статью