Como usar o 7z para comprimir via tubo?

16

Estou usando isso para criar backups com segurança (? - é realmente seguro? Com ​​uma boa senha?):

# ENCRYPT
ORIGDIR="DIRECTORYNAMEHERE"; tar cvf - "${ORIGDIR}/" 2>/dev/null | gzip -9 - 2>/dev/null | openssl aes-256-cbc -salt -out "${ORIGDIR}.tar.gz.aes"

# DECRYPT
openssl aes-256-cbc -d -salt -in "ENCDIRECTORYNAMEHERE" | tar -xz -f -

P: Mas como posso fazer isso usando 7z com taxa de compactação máxima?

Criar arquivos temporários além do único arquivo OUTPUT não é bom, porque se eu precisar compactar ~ arquivos / diretórios com tamanho de 100 GByte em um FS de 180 GByte, não teria espaço livre suficiente (se ex .: o arquivo compactado levaria ~ 60 GByte).

gasko peter
fonte

Respostas:

6

Existe uma razão para você querer usar 7zespecificamente ou apenas deseja uma compressão melhor gzip?

O xzutilitário usa o mesmo algoritmo de compactação que 7z(LZMA) e permite a compactação canalizada da mesma forma que gzip.

tar cvf ... | xz -9 | openssl ...
David Baggerman
fonte
A razão que eu, pessoalmente, precisava especificamente 7z é capacidade de dividir a vários volumes
Unirgy
1
xz não foi multi-threaded no momento (que pode não ser ainda) para que em um computador multi-core que poderia ser muito mais lento do que 7z
Xen2050
25

Isso é coberto na página de manual do 7z:

-si    Read data from StdIn (eg: tar cf - directory | 7z a -si directory.tar.7z)
Wieland
fonte
Posso colocar um "|" e processá-lo depois do 7z?
Gasko peter
4
Você pode usar -sopara despejar os dados compactados no stdout em vez de em um arquivo.
Wieland
1

Para criar rapidamente um arquivo de preparação de backup remoto de todos os meus scripts pessoais, use o seguinte:

# Scripts backup
ls ~/*.sh | cpio -ov | 7z a -si ~/Documents/SCRIPT_BACKUP_30062017.cpio.7z
# Scripts restore
7z x -so ~/Documents/SCRIPT_BACKUP_30062017.cpio.7z | cpio -iv   

Motivo pelo qual não faço backup da raiz 'home' é que sincronizo especificamente e envio apenas alguns diretórios. Observe como o cpio irá pular e verificar se há arquivos existentes mais recentes na restauração. Isso é poderoso. Seu trabalho não será substituído.

bud @

Will Budic
fonte
-1

acabou de funcionar, postgres pgdumpallem um arquivo 7zip: use set pgpassword=xxxxxantes de emitir o comando:

pg_dumpall -U postgres | c:\"program files"\7-Zip\7z.exe a -si e:\directory\output.file.sqlc

Levou apenas 4 dias para despejar e compactar! 50201104790 bytes (47GB)

klmbear
fonte