Mar*_*ler 10
\n\n我有一个用例,我需要将一堆文件打包成一个
\n
啊,你需要一个文件存档
\n\n\n以上所有命令的作用都是相同的。
\n
一点也不!有些是归档器,有些是压缩器,有些是解压缩器,有些是组合。
\nar
:非常古老,用例非常具体。很确定你永远不想使用ar
自己。gzip
/ gunzip
:不是存档器。可以获取单个数据流并对其进行压缩(或解压缩,在 的情况下gunzip
)。您可以将其与存档器一起使用。Gzip 非常古老、缓慢且低效,有一些替代方案可以实现更高的压缩率或更高的速度,或者它们的任何混合(例如zstd
,,lz4
)tar
:磁带归档器的缩写;一个非常常见的归档程序,您也可以用它来压缩内容。例如:tar cf archive.tar file1 file2 file3\n
Run Code Online (Sandbox Code Playgroud)\n创建包含 file1、file2 和 file3 的未压缩存档。但是,将z
选项添加到c
reate 命令中(我知道 的tar
语法很糟糕):
tar czf archive.tar.gz file1 file2 file3\n
Run Code Online (Sandbox Code Playgroud)\n将在内部使用tar
并gzip
创建一个已压缩的 tar 存档。
\n您还可以将结果通过您选择的任何压缩器进行管道传输以获得压缩档案,例如
tar cf - file1 file2 file3 | gzip > archive.tar.gz # or\ntar cf - file1 file2 file3 | zstd > archive.tar.zst # or\ntar cf - file1 file2 file3 | lz4 - archive.tar.xz # or\ntar cf - file1 file2 file3 | xz > archive.tar.xz\n
Run Code Online (Sandbox Code Playgroud)\n你明白了。
\n虽然很常见tar
,但它是一个非常古老的程序和格式,并且还有很多不足之处。但它确实正确处理 Linux 文件所有权、权限、链接、特殊文件\xe2\x80\xa6
zip
是一个压缩存档器。在 Windows 上也能很好地工作,但不能处理文件权限。因此,不可用于备份!7z
就像zip,一个压缩归档器,它不能处理用户和权限信息。因此,不可用于备份!mksquashfs
是一种归档程序,用于非常整齐地打包的归档文件,也可以像普通文件系统一样使用。它可以根据要求使用现代的非常快或非常强的压缩。\n\n现在有人会说,使用压缩在网络上传输文件时可以节省一些时间,但解压缩和解压缩可以补偿我在传输中节省的时间。
\n
那些人是对的!如果您使用现代的、速度优化的压缩,您会更快通过解压缩从 SSD 读取或写入而且比您的网络快得多(除非您正在考虑数据中心级网络)。
\n因此,如果您关心速度,请使用使用快速压缩机的设备。正如所说,gzip
可能不是 2023 年的压缩机选择,所以
tar cf - srces/ | zstd -1 > archive.tar.zst\n
Run Code Online (Sandbox Code Playgroud)\n在我使用源代码和二进制文件混合的测试中,实现了大约 3 Gb/s 的存档速率(如果您计划通过网络进行传输,并认为压缩器将成为瓶颈)。原来的 4.97 GB 变成了 1.4 GB。使用-2
代替-1
会使结果再小 10%,并将速度降低至 2.5 Gb/s。这仍然比大多数 SATA SSD 的写入速度更快。这是单线程的。用于zstd -2 -T0
充分利用所有 CPU 核心,我的简陋 PC 的速度为 6.5 Gb/s;zstd -4 -T0
仍然为 2.5 Gb/s,因此超出了我的大多数网卡的性能,并且大小降至 1.2 GB :)
所以:
\ntar cv - files\xe2\x80\xa6 | zstd -4 -T0 > archive.tar.zst
就是你想要的tar cv - files\xe2\x80\xa6 | zstd -13 -T0 > archive.tar.zst
速度较慢,但已经提供了非常高的压缩比。mksquashfs files\xe2\x80\xa6 archive.squashfs -comp=zstd
; 添加-Xcompression-level 4
到末尾以获得更高的速度,但会牺牲大小。生成的archive.tar.zst
文件可以直接使用现代 GNU tar 解压缩tar xf archive.tar.zst
;可以像 DVD 一样archive.squashfs
直接安装并使用(即,您可以直接浏览其上的文件),也可以使用udisksctl loop-setup -f archive.squashfs
unsquashfs archive.squashfs