Команда find и поиск файлов при помощи командной строки Linux

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

Для поиска файлов и папок в Linux есть мощная команда — find. В этой статье мы разберем несколько примеров ее использования.

Что собой представляет команда find в Linux?

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

Вот базовый синтаксис команды find:

find /path/ -type f -name file-to-search

Распишем подробно:

  • /path — это путь к месту, где нужно искать файл. Это стартовая позиция для поиска файлов. В качестве пути может выступать / или ., что означает корневую и текущую директорию соответственно.
  • -type представляет файловые дескрипторы. Они могут быть следующими:
    • f – обычный файл, например, текстовый, файл изображения, скрытый файл.
    • d – директория. Для тех случаев, когда нужно найти папки.
    • l – символическая ссылка. Такие ссылки указывают на файлы.
    • c – символьные устройства. Файлы, используемые для доступа к символьным устройствам, называются файлами символьных устройств. Драйверы коммуницируют с символьными устройствами, отсылая и получая отдельные символы (байты, октеты). Примеры таких устройств — клавиатуры, звуковые карты и мыши.
    • b – блочные устройства. Файлы, используемые для доступа к блочным устройствам, называются файлами блочных устройств. Драйверы коммуницируют с блочными устройствами, отсылая и получая целые блоки данных. Примеры таких устройств — USB, CD-ROM.
  • -name — имя (часть имени) файла, который вы хотите найти.

Команда find: практические примеры

Теперь, познакомившись с синтаксисом find, давайте рассмотрим примеры использования этой команды.

Как искать файлы по имени или по расширению

Предположим, нам нужно найти файлы, в названии которых содержится слово «style». Для этого мы используем следующую команду:

find . -type f -name style*

Результат:

А если мы хотим найти файлы с определенным расширением, например, .html, команду нужно слегка видоизменить:

find . -type f -name *.html

Результат:

Как искать скрытые файлы

Имена скрытых файлов начинаются с точки. Обычно они скрыты, но их можно увидеть в общем списке файлов в директории, если к команде ls добавить флаг -a.

Чтобы найти скрытые файлы при помощи find, команду нужно написать следующим образом:

find . -type f -name ".*"

Результат:

Как искать логи и конфиги

Лог-файлы имеют расширение .log. Найти их можно так:

find . -type f -name "*.log"

Результат:

Аналогично можно искать конфигурационные файлы:

find . -type f -name "*.conf"

Как искать файлы по типу

Чтобы найти символьные файлы, нужно указать дескриптор c для -type:

find / -type c

Аналогично, для блочных файлов нужно указать дескриптор b:

find / -type b

Как искать директории

Команда, приведенная ниже, позволит нам найти папки, имена которых начинаются с lib. Обратите внимание, что мы используем -type d.

find . -type d -name "lib*"

Результат:

Примечание. Чтобы увидеть, какие подпапки есть в заданной папке, нужно выполнить команду ls -l. То, что файл является директорией, будет видно по букве d:

Как искать файлы по размеру

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

find / -size +250MB

Здесь мы выводим файлы, размер которых превышает 250MB.

Можно использовать и другие единицы:

  • G: гигабайты
  • M: мегабайты
  • K: килобайты
  • b: байты

Просто заменяйте <Unit Type> соответствующими единицами измерения.

find <directory> -type f -size +N<Unit Type>

Как искать файлы по времени изменения

find /path -name "*.txt" -mtime -10
  • -mtime +10 означает, что мы ищем файл, измененный больше 10 дней назад
  • -mtime -10 означает, что искомый файл был изменен меньше, чем 10 дней назад
  • -mtime 10 без + или — означает, что файл был изменен ровно 10 дней назад.

Вот содержимое моей домашней директории:

Примечание редакции Techrocks. Для вывода содержимого домашней директории использована команда ls -ltra. Эти флаги означают вывод полной информации (-l) с упорядочиванием по времени модификации (-t) в обратном порядке (-r), со включением скрытых файлов (-a). Оригинальная статья опубликована 17 марта.

Попробуем произвести в этой директории поиск по времени изменения.

find . -type f -name ".*" -mtime +10

Выведены файлы, измененные больше 10 дней назад.

Команда find в bash-скриптах

Мы можем использовать find вместе с командами rm или mv и таким образом создавать полезные bash-скрипты для автоматизации действий с файлами.

Скажем, мы хотим написать скрипт, перемещающий логи, которым больше 7 дней, в бэкап. А в бэкапе хотим удалять файлы логов, которым больше 30 дней.

Мы можем написать такой скрипт и сделать его выполняемым по графику при помощи cron. О cron можно подробнее почитать в статье «Задачи cron и автоматизация в Linux».

Вот наш скрипт:

#!/bin/bash
# Скрипт для перемещения логов старше 7 дней в бэкап по адресу /app/backup_logs/ESB0*

# Переместить ESB01 логи в бэкап
find /logs/esb01/audit  -name "*.tar.gz" -mtime +7 -exec mv {} app/backup_logs/ESB01/ \;

# Удалить из бэкапа логи старше 30 дней
find /app/backup_logs/ESB01 -name "*.tar.gz" -mtime +30  -exec rm {} \;

Обратите внимание, что здесь мы используем exec. В общем, exec выполняет переданную ему команду (в нашем случае mv и rm). {} — плейсхолдер для результатов этой команды. Наконец, мы указываем разделитель ;. Поскольку мы не хотим, чтобы оболочка интерпретировала точку с запятой, мы экранируем ее при помощи обратной косой черты \.

Этот скрипт очень полезен для архивации и удаления логов.

Итоги

В этой статье мы познакомились с командой find. Мы научились искать файлы по имени, типу, размеру и дате изменения при помощи командной строки.

Перевод статьи «How to Search for Files from the Linux Command Line».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх