使用命令“ gzip”创建档案


12

我必须使用命令gzip(不是tar,这是必要的)创建一个档案,该档案应包含另一个目录中的文件,例如/ etc。我尝试使用命令

gzip myetc.gz /etc

但这没有用。


3
gzip不是zip。它们是工作不同的不同工具。
roaima '16

3
gzip只是流压缩机。它不知道文件或目录。

3
为什么不能使用tar?
marcelm '16

如果没有tar,您有cpio吗?
Rup

2
您说要创建档案,但是不能使用tar。您知道单词“ tar”的一部分来自“ ARchive”。我的意思是,这就是存在的理由。谁或什么想要从归档创建过程中排除“ tar”?基本上,您是在问如何用锤子(不是螺丝刀,这是必要的)驱动螺钉。
Mike S

Answers:


6

Gzip仅适用于单个文件或流-通过管道传输到gzip的数据。因此,您首先需要生成一个文件(如tar),然后可以gzip压缩。另一种选择是gzip所有单个文件,然后将其压缩为一个文件。

这些解决方案都是愚蠢的,不应使用。您应该将tar与内置的压缩​​选项一起使用,并在一个命令中完成所有操作。


1
为什么第一种方法愚蠢?这是通常的生产方式.tar.gz...
rexkogitans '16

好吧,愚蠢的词可能不正确,但是如果可以将tar与c选项一起使用,则可以使用gzip而不是gzip。它更简单,而且我不认为将tar压缩到gzip中没有优势。
SPRBRN

Gzip可以使用-r选项处理多个文件,但是会为文件夹中的每个文件创建一个新的.gz。
Luciano Andress Martini

1
@rexkogitans-它是愚蠢的,cat filename | grep blah也是愚蠢的。它也不是最优的,因为它将占用较大的临时空间。我不知道我是否会称其为愚蠢的,不必要的,次优的,而且通常只是丑陋的。好吧,愚蠢的作品也是如此。
Mike S

哦,现在我看到了这么愚蠢。不,`tar -czf`是可行之道,因为它不涉及无用的fork()
rexkogitans

13

gzip适用于文件,而不适用于目录。因此,要创建您需要使用的目录的归档文件tar(将从多个文件中创建一个tar包):

tar cvf myetc.tar /etc

或者,对于压缩文件:

tar cvzf myetc.tar.gz /etc

2
如果有一个没有“ -z”选项的“古老”系统,他们可以这样做:( cd / ; tar cf - ./etc | gzip -c - > myetc.tar.gz 如果您想知道为什么我用“ ./etc”而不是“ / etc” tar,那是因为在那些较旧的系统上,当使用tar时xvf,它将输出到/ etc并覆盖它... [或者在这种情况下必须使用“ pax”)。反向命令,即在“ / somewhere”下提取该存档: cd /somewhere ; gzip -dc < /the/location/of/myetc.tar.gz | tar xvf -
Olivier Dulac

1

如果您确实没有可用的tar,则可以使用gzip使用选项(-r-递归地)创建目录的备份,但是也许这并不是您所期望的。

首先,如果要保持原始目录不变,则需要将目录复制到另一个名称。

#cp -a directory my_gzip_alone_backup

其次,您将递归压缩目录中的所有文件(-r)。

#gzip -r my_gzip_alone_backup

现在,让我们看一下my-gzip-alone-backup。您将不会像期望的那样有一个文件myfile.gz,而是递归地压缩了很多gzip文件。但是由于符号链接而用etc这样做是不好的...

要解压缩目录,可以对gunzip应用相同的逻辑。

另一种方法是将目录转换为单个文件,如果您没有tar来执行此操作,但是却拥有dd util,如本文中所示:https : //askubuntu.com/questions/626634/converting-a文件到目录

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.