我正在阅读 bzip2 的离线文档,有人告诉我可以使用 bzip2 将多个文件压缩成一个档案,如下所示:
bzip2 finalArchive.bz2 file1 file2 file2
但是当我尝试这个时我得到
无法打开输入文件 finalArchive.bz2:没有此文件或目录。
我将这 3 个文件分别压缩为 file1.gz2、file2.gz2 和 file3.gz2,并且我也知道可以将cat
它们压缩为一个文件,但我希望能够使用一个命令来完成此操作。
我可以使用 zip 来做到这一点:
zip finalArchive.zip file1 file2 file3
我得到了预期的finalArchive.zip
文件
答案1
bzip2
和都gzip
适用于单个文件。压缩该文件时,将删除未压缩的版本。提取时则相反。
要将多个文件放入bzip2
存档中,请先使用tar
将它们合并为一个文件,然后压缩该文件。或者,由于是tar
“zip 感知”,您可以-j
在创建 tar 存档时使用标志使用 bzip2 压缩,所有这些都作为一个步骤完成。
答案2
最常见的 Unix 压缩实用程序(gzip
、、)均对单个文件进行操作,而制作多文件存档的标准方法是将它们用 进行bzip2
合并。xz
tar
您收到Can't open input file finalArchive.bz2: No such file or directory.
错误是因为bzip2
认为您想要压缩一个名为的文件finalArchive.bz2
,但该文件当然不存在。
为了完成您想要的操作,请使用以下命令:
tar -cjf finalArchive.tar.bz2 file1 file2 file3
其中j
选项指定tar
要使用bzip2
什么来压缩tar
档案。请参阅tar
手册中的相关章节了解更多信息。
如果您使用的是没有压缩支持的非常旧的版本tar
,则需要手动执行压缩步骤:
tar -cf - file1 file2 file3 | bzip2 -c > finalArchive.tar.bz2
答案3
bzip2 和 gzip 都使用文件连接。这意味着bzip2 files
将导致files.bz2
。可以连接多个文件,例如:
bzip2 -c file1 > files.bz2
bzip2 -c file2 >> files.bz2
但是,这几乎与执行的操作相同,您可以使用以下命令cat file1 file2 > files
检查连接的未压缩结果,例如:stdout
bzcat
bzcat files.bz2
因此files.bz2
最终仍将是一个文件。为了清楚起见,如果您提取如下files.bz2
内容:
bunzip files.bz2
结果将只是一个名为 的文件files
,其内容将是 和 的file1
连接file2
。
tar
多个文件需要用如下命令进行打包,tar -cvjf files.tbz file1 file2
其中此处-j
是命令中的等效包装器标志,tar
用于添加 bzip 压缩。