В Solaris: поиск, добавление в tar-архив и сжатие вопроса

В Solaris: поиск, добавление в tar-архив и сжатие вопроса

Солярис 11

Я хочу найти все файлы старше 31 дня, заархивировать их и сжать tar-файл.

Я бы хотел сделать это в одну строку. Я бы лучше использовал pbzip2, чем gzip!!!

Вот что я попробовал в качестве прототипа: find /tmp -mtime +31 -type f -name "arch*" -exec sh -c 'tar -czvPfE /tmp/old_files_$(date +%F).tar.gz $0' {} \;

Проблема в том, что он создает tar.gz для каждого файла, перезаписывая файл до него (я хочу, чтобы все файлы были в одном tar-шаре). "r" не работает, если tar не существует. А "z" вызывает gzip, а не pbzip2

ОБНОВЛЯТЬ: @DopeGhoti Thank you. First, my bad for not checking the man page for the "j" option. However, this almost worked. root@myhost:/tmp# find /tmp -mtime +31 -type f -name "arch*"| wc -l =207 root@myhost:/tmp# find /tmp -mtime +31 -type f -name "arch*"| xargs tar -cjf /tmp/old_files_$(date +%F).tbz root@myhost:/tmp# l|tail -rw------- 1 root root 1.6K Nov 30 15:59 old_files_2017-11-30.tbz root@myhost:/tmp# bunzip2 old_files_2017-11-30.tbz root@myhost:/tmp# tar tf old_files_2017-11-30.tar|wc -l =15

решение1

Предполагая, что имена файлов не содержат символов новой строки, POSIXly (за исключением pbzip2очевидных случаев), который по умолчанию принимает список файлов для архивации на stdin (а ​​также записывает архив на stdout)

find /tmp -mtime +31 -type f -name "arch*" | pax -w | pbzip2 > file.tar.bz2

Или использовать Solaris tar, чтобы сохранить свои параметры P/ :E

find /tmp -mtime +31 -type f -name "arch*" |
  tar cvPEf - -I /dev/stdin | pbzip2 > file.tar.bz2

-I /dev/stdinвзять список файлов из stdin, f -вывести архив на stdout, который затем сжимается pbzip2аналогично с помощью pax.

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