Как запустить 2 команды после поиска файлов командой find
Появилась необходимость архивировать файлы старше 7 дней. Делаю это при помощи bzip2. Но в нем нет встроенного удаления файла, после архивации.
Поэтому нужно сначала заархивировать, а после удалить заархивированный файл. Я знаю, что это можно сделать при помощи 2 отдельных команд, но уверен, что можно и одной (дабы не занимать в crontab много места)
Ответы (1 шт):
Автор решения: Dr Proger
→ Ссылка
Немного покопавшись нашёл, как использовать 2 команды с find. В этом помогает параметр -exec:
find /home/user/logs -type f -name '*log' -mtime +7 -exec bash -c "bzip2 -k {}; rm {}" \;
Пояснения:
/home/user/logs- каталог, в котором мы ищем файлы-type f- искать только файлы-mtime +7- файлы, которые старше 7 дней-exec bash -c- оболочка под которой будут запускаться следующие команды"bzip2 -k {}; rm {}"- список команда, запускаемых поочерёдно (будут применяться к каждому файлу по отдельности
К примеру, в директории /home/user/logs хранятся следующие файлы:
result_program_1.log
result_program_2.log
result_program_3.log
result_program_4.log
result_program_5.log
Первые три файла, старше 7 дней, так что выполнение вышеописанной команды find в результате будет выглядеть так:
bzip2 -k result_program_1.log
rm result_program_1.log
bzip2 -k result_program_2.log
rm result_program_2.log
bzip2 -k result_program_3.log
rm result_program_3.log