Поиск с Find для файлов/директорий и смены прав доступа в Linux

Поиск с Find для файлов/директорий и смены прав доступа в Linux

2025-05-16

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

Основной синтаксис команды find

Синтаксис команды find выглядит следующим образом:

1
find [путь] [условия поиска] [действия]
  • путь: Указывает каталог, в котором будет производиться поиск. Если путь не указан, find будет искать в текущем каталоге.
  • условия поиска: Критерии, по которым будет производиться поиск (например, имя файла, тип и т.д.).
  • действия: Действия, которые будут выполнены над найденными файлами (например, вывести на экран, удалить и т.д.).

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

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

Чтобы найти файлы с определённым именем, используйте опцию -name. Например, чтобы найти файлы с именем example.txt в каталоге /home/user, выполните:

1
find /home/user -name "example.txt"

2. Поиск файлов с использованием подстановочных знаков

Вы можете использовать подстановочные знаки (* и ?) для поиска файлов с частичным совпадением. Например, чтобы найти все файлы с расширением .md в текущем каталоге и его подкаталогах:

1
find . -name "*.md"

3. Поиск файлов по типу

Для поиска файлов определённого типа используйте опцию -type. Например, чтобы найти все каталоги:

1
find /path/to/search -type d

Чтобы найти только обычные файлы:

1
find /path/to/search -type f

4. Поиск файлов по размеру

Вы можете искать файлы по их размеру с помощью опции -size. Например, чтобы найти файлы размером больше 10 МБ:

1
find /path/to/search -size +10M

5. Поиск файлов по времени изменения

Для поиска файлов, изменённых за определённый период, используйте опции -mtime (изменённые) или -atime (последний доступ). Например, чтобы найти файлы, изменённые за последние 7 дней:

1
find /path/to/search -mtime -7

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

Вы можете выполнять действия над найденными файлами с помощью опции -exec. Например, чтобы удалить все файлы с расширением .tmp:

1
find /path/to/search -name "*.tmp" -exec rm {} \;

В этом примере {} будет заменено на имя найденного файла, а \; указывает на конец команды.

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

Вы можете комбинировать условия поиска с помощью логических операторов -and, -or и -not. Например, чтобы найти все файлы с расширением .md или .txt:

1
find . \( -name "*.md" -or -name "*.txt" \)

8. Изменить права доступа для директорий

1
find /путь/к/директории -type d -exec chmod 755 {} \;
  • -type d — ищет только директории.

  • Для каждой найденной директории выполняет chmod 755, что означает:

    • Владелец: чтение, запись, выполнение
    • Группа: чтение, выполнение
    • Остальные: чтение, выполнение

9. Изменить права доступа для файлов

1
find /путь/к/директории -type f -exec chmod 644 {} \;
  • -type f — ищет только файлы.

  • Для каждого файла выполняет chmod 644, что означает:

    • Владелец: чтение, запись
    • Группа: чтение
    • Остальные: чтение

В этом случае find передаёт несколько найденных файлов за один вызов команды, что может быть эффективнее. Но в некоторых случаях нужно именно выполнять команду отдельно для каждого элемента — тогда используется \;.

Итог

  • Команда find с -exec позволяет выполнять операции над каждым найденным файлом или директорией.
  • {} — это шаблон, который заменяется именем текущего найденного объекта.
  • \; — обозначает конец команды.