Разбор конструкции find -exec и варианты использования
Эти команды — мощные инструменты для поиска, обработки и фильтрации данных в Linux.
1. Что означает {} \; в команде find?
{}– это специальный placeholder, который заменяется на имя каждого найденного файла.\;– завершает команду, передаваемую в-exec. Обратный слэш (\) экранирует точку с запятой, чтобы shell не интерпретировал её как конец команды.
Пример:
find /home -user olduser -exec chown newuser {} \;
Здесь:
findищет все файлы в/home, принадлежащиеolduser.- Для каждого файла выполняется
chown newuser filename. {}подставляется как имя файла, а\;указывает на конец команды.
2. Альтернативные форматы -exec
Вариант 1: + вместо \; (группировка файлов)
+в конце передаёт все найденные файлы одной командой (эффективно для массовых операций).
Пример:
find /var/log -name "*.log" -exec tar -czvf logs.tar.gz {} +
- Создаёт один архив со всеми
.log-файлами (вместо запускаtarдля каждого файла отдельно).
Вариант 2: -execdir (безопасное выполнение)
- Выполняет команду в директории файла (защита от path injection).
Пример:
find /tmp -type f -execdir rm {} \;
- Удаляет файлы, запуская
rmиз их родительских директорий.
3. Другие полезные команды с -exec
Изменение прав (chmod)
find /path -type f -exec chmod 644 {} \;
- Устанавливает права
644на все файлы.
Поиск и замена текста (sed)
find . -name "*.txt" -exec sed -i 's/foo/bar/g' {} \;
- Заменяет
fooнаbarво всех.txt-файлах.
Копирование файлов (cp)
find /src -name "*.jpg" -exec cp {} /dest \;
- Копирует все
.jpgиз/srcв/dest.
Подсчёт строк (wc)
find . -type f -exec wc -l {} \;
- Считает строки в каждом файле.
Удаление файлов старше 30 дней
find /backups -mtime +30 -exec rm {} \;
- Удаляет файлы, не изменявшиеся больше месяца.
4. Комбинации с xargs (альтернатива -exec)
Если -exec неудобен, можно использовать xargs:
find /path -name "*.tmp" | xargs rm
xargsпередаёт имена файлов вrmпачками (аналогично+в-exec).
С обработкой пробелов в именах:
find /path -name "*.log" -print0 | xargs -0 tar -czvf logs.tar.gz
-print0и-0корректно обрабатывают пробелы в путях.
5. Полезные опции find для -exec
| Опция | Пример | Описание |
|---|---|---|
-type f |
find /path -type f -exec ... |
Только файлы. |
-type d |
find /path -type d -exec ... |
Только директории. |
-mtime -7 |
find /log -mtime -7 -exec ... |
Файлы, изменённые за последние 7 дней. |
-size +1G |
find / -size +1G -exec ... |
Файлы >1 ГБ. |
-perm 777 |
find / -perm 777 -exec ... |
Файлы с правами 777. |
Итог
{} \;– подставляет имя файла и завершает команду.+– группирует файлы для одной команды (эффективнее).-execdir– безопасное выполнение в директории файла.- Альтернативы:
xargs,-delete,-printf.
Пример на все случаи:
find ~/Downloads -name "*.iso" -size +1G -exec ls -lh {} +
- Находит ISO-файлы >1 ГБ в
~/Downloadsи выводит их список с размерами.