我用它来安全地创建备份(? - 它真的安全吗?有一个好的密码吗?):
# 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 和最大压缩率来做到这一点呢?
除了唯一的输出文件之外创建临时文件并不好,因为如果我需要在 180 GB FS 上压缩 ~100 GB 大小的文件/目录,我将没有足够的可用空间(例如:压缩文件将需要 ~60千兆字节)。
答案1
7z 的手册页对此进行了介绍:
-si Read data from StdIn (eg: tar cf - directory | 7z a -si directory.tar.7z)
答案2
您是否有特定原因想要使用7z
,或者您只是想要比 更好的压缩gzip
?
该xz
实用程序使用与 (LZMA) 相同的压缩算法7z
,并允许与gzip
.
tar cvf ... | xz -9 | openssl ...
答案3
从 stdin 读取并写入 stdout 的一些示例:
echo "hello world" | 7z a .xz -si -so | xz -dc # hello world
echo "hello world" | 7z a .xz -si -so | wc -b # 64
echo "hello world" | 7z a .xz -si -so | 7z x -txz -si -so # hello world
7z x -so db.sql.xz | less # preview compressed database file
a
创建档案。需要文件名;我们只是.xz
滥用它来设置存档类型,因为我们实际上并不关心名称-si
从标准输入读取-so
写入标准输出x
提炼;还必须指定-t
类型,因为我们没有创建带有文件名的存档
答案4
要快速创建我所有主脚本的远程备份准备文件。我使用以下命令:
# 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 在恢复时如何跳过并检查较新的现有文件。这很强大。您的工作不会被覆盖。
芽@