Запуск find ... exec tar czvf архивирует только один файл ... нужны все файлы

915
Stryker CainII

При попытке запустить

find . -iname "*.gz" -mtime +7 -exec tar czvf all_gizip_$(date +%Y-%m-%d).tar.gz {} \; 

Я получаю список файлов

./corosync.log-20140620.gz ./corosync.log-20140618.gz ./rgmanager.log-20140620.gz ./fenced.log-20140620.gz ./rgmanager.log-20140618.gz ./qdiskd.log-20140618.gz 

Но архив получает только последний элемент

 tar -tvf all_gizip_$(date +%Y-%m-%d).tar.gz -rw-r--r-- root/root 506 2014-06-18 03:21 ./qdiskd.log-20140618.gz 

Что я делаю неправильно?

1
Похоже, что поиск ограничен последними 7 днями, файлы соответствуют этим критериям? Tyson 10 лет назад 0
Да, Тайсон. Log rotate создает .gz для начала. Мне нужно запустить второй в cron, чтобы взять все gz и поместить их в один gz, а затем переместить их в архив. Jjlin дал мне исправление к моему оригиналу. Stryker CainII 10 лет назад 0

1 ответ на вопрос

0
jjlin

Ваша команда выполняется tarодин раз для каждого файла, и каждый вызов tarсоздает вывод с тем же именем, перезаписывая предыдущий вывод. Таким образом, вы получите только последний файл. Вам нужно что-то вроде

find . -iname "*.gz" -mtime +7 | xargs tar czvf all_gizip_$(date +%Y-%m-%d).tar.gz 

Это должно работать нормально, пока ваш список файлов не огромен. Если это так, то вы, вероятно, захотите переключиться на использование tar rvfи выполнение отдельного gzipшага в конце.

Похожие вопросы