Solaris 11
Eu quero encontrar todos os arquivos com mais de 31 dias, tar e compactar o arquivo tar.
Eu gostaria de fazer isso em uma linha. Prefiro usar pbzip2 do que gzip!!!
Aqui está o que eu tentei como um protótipo:
find /tmp -mtime +31 -type f -name "arch*" -exec sh -c 'tar -czvPfE /tmp/old_files_$(date +%F).tar.gz $0' {} \;
O problema com isso é que ele cria um tar.gz para cada arquivo, substituindo o arquivo anterior (quero todos os arquivos em apenas uma bola tar). O "r" não funciona a menos que o alcatrão exista. E o "z" chama gzip não pbzip2
ATUALIZAR:
@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
Supondo que os nomes dos arquivos não contenham caracteres de nova linha, POSIXly (exceto
pbzip2
obviamente), que leva a lista de arquivos para arquivar em stdin por padrão (e também grava o arquivo em stdout por padrão)Ou para usar o Solaris
tar
para que você possa manter suasP
/E
opções:-I /dev/stdin
para obter a lista de arquivos de stdin,f -
para gerar o arquivo em stdout, que é então compactado porpbzip2
como compax
.