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

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

При попытке бежать

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

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

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

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

Связанный контент