TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #148 1.1K
find + exec: создание цепочек команд в одном вызове

find - это утилита для поиска файлов и директорий, а с опцией -exec она превращается в инструмент для выполнения сложных операций над найденными объектами. Вместо множества вызовов команд можно всё сделать в одной строке. Разберём интересные примеры.

Базовый пример. Удалим все файлы .tmp в директории и её подкаталогах:


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


{} - это подстановка имени файла.
\; - завершает команду -exec.

1. Замена текста в файлах. Найдём файлы .txt и заменим в них все вхождения слова "TODO" на "DONE":


find /path/to/dir -name "*.txt" -exec sed -i 's/TODO/DONE/g' {} \;


Теперь все файлы обновлены автоматически!

2. Сжатие найденных файлов. Архивируем все .log файлы старше 7 дней:


find /var/log -name "*.log" -mtime +7 -exec gzip {} \;


3. Сложные операции с несколькими командами. Передача результата одной команды в другую возможна через sh -c:


find /path/to/dir -name "*.conf" -exec sh -c 'mv "$1" "${1%.conf}.bak"' _ {} \;


Здесь мы меняем расширение всех файлов .conf на .bak.

4. Параллельное выполнение с +. Если обработка большого числа файлов занимает много времени, используйте + вместо \; для выполнения команд за один вызов:


find /path/to/dir -name "*.log" -exec rm {} +


Это значительно ускоряет выполнение, передавая несколько файлов в один вызов rm.

5. Просмотр перед выполнением. Всегда проверяйте результат поиска перед выполнением команд:


find /path/to/dir -name "*.log" -exec echo "Удаляю: {}" \;


Это один из способов убедиться, что вы не удалите ничего лишнего.

Комбинация с другими инструментами

1. Аудит прав доступа. Проверим файлы с неправильными правами доступа и исправим их:


find /path/to/dir -type f ! -perm 644 -exec chmod 644 {} \;


Теперь все файлы имеют права 644.

2. Поиск и отправка больших файлов. Найдём файлы больше 100 МБ и передадим список на удалённый сервер:


find /path/to/dir -size +100M -exec scp {} user@remote:/backup/ \;


3. Запрос на подтверждение действий. Используйте -ok вместо -exec для подтверждения действий:


find /path/to/dir -name "*.tmp" -ok rm {} \;


В данном случае каждое действие потребует подтверждения.

BashTex 📱 #linux #utils
  • 👍 16
  • 🔥 2
More from @bash_tex
  1. Oct 13, 2026openat2(): как Linux защищает от выхода за пределы каталога Допустим, приложение должно чи…
  2. Oct 12, 2026xargs против while read: где быстрее и безопаснее Обе конструкции позволяют обработать спи…
  3. Oct 9, 2026BashTex 📱 #мем
  4. Oct 8, 2026Bridge FDB - как Linux bridge узнаёт, где находится MAC Linux bridge не знает заранее, за…
  5. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  6. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →