No Solaris; encontrar, anexar a uma bola de alcatrão e comprimir pergunta

1

Solaris 11

Eu quero encontrar todos os arquivos maiores que 31 dias, tar e compactar o arquivo tar.

Eu gostaria de fazer isso em uma linha. Eu prefiro usar o pbzip2 do que o gzip !!!

Aqui está o que eu tentei como protótipo: find /tmp -mtime +31 -type f -name "arch*" -exec sh -c 'tar -czvPfE /tmp/old_files_$(date +%F).tar.gz $0' {} \;

Problema com isso é que cria um tar.gz para cada arquivo sobrescrevendo o arquivo antes dele (eu quero todos os arquivos em apenas uma tarball). O "r" não funciona a menos que o tar exista. E o "z" chama gzip não pbzip2

ATUALIZAÇÃO: @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

    
por Marinaio 30.11.2017 / 16:45

1 resposta

1

Supondo que os nomes dos arquivos não contenham caracteres de nova linha, POSIXly (exceto por pbzip2 obviamente), que pega a lista de arquivos para arquivar em stdin por padrão (e também grava o arquivo em stdout por padrão)

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

Ou para usar o Solaris tar , para que você possa manter suas opções P / E :

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

-I /dev/stdin para obter a lista de arquivos de stdin, f - para gerar o arquivo no stdout, que é compactado em pbzip2 , como pax .

    
por 30.11.2017 / 17:09