При попытке бежать
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
шаг в конце.