如何使用7z通过管道压缩?


16

我正在使用它来安全地创建备份(?-是否真的安全?使用一个好的密码?):

# 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 -

问:但是如何使用最大压缩率的7z来做到这一点?

除了唯一的OUTPUT文件之外,创建临时文件也不是一件好事,因为如果我需要在180 GB FS上压缩〜100 GB大小的文件/目录,我将没有足够的可用空间(例如:压缩文件将占用〜60 GB)。

Answers:


6

您是否有理由要7z专门使用它,或者只是想要比更好的压缩方式gzip

xz实用程序使用与7z(LZMA)相同的压缩算法,并允许与相同的管道压缩gzip

tar cvf ... | xz -9 | openssl ...

我个人特别需要7z的原因是能够拆分成多个卷
Unirgy 2015年

1
xz当时还不是多线程的(可能还没有),所以在多核计算机上它可能比7z慢很多
Xen2050 2016年

25

这在7z的手册页中进行了介绍:

-si    Read data from StdIn (eg: tar cf - directory | 7z a -si directory.tar.7z)

我可以放一个“ |”吗 并在7z之后进一步处理?
加斯科·彼得

4
您可以-so用来将压缩数据转储到stdout而不是文件中。
维兰德

1

为了快速创建所有主脚本的远程备份准备文件。我使用以下命令:

# 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   

我之所以不备份“主目录”根目录,是因为我专门同步并仅发送一些目录。请注意,cpio将如何跳过并在还原时检查较新的现有文件。这很强大。您的工作不会被覆盖。

芽@


-1

刚开始工作,将postgres pgdumpall压缩为7zip文件:set pgpassword=xxxxx在发出命令之前使用:

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

只需4天就可以将其转储并压缩!50201104790字节(47GB)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.