使用 Gnu/Linux 命令行将一个文件压缩为另一个文件

使用 Gnu/Linux 命令行将一个文件压缩为另一个文件

我正在尝试获取一个包含文本的文件,名为,并将其压缩到同一目录中MyFile名为 的文件中。MyFileComp

我努力了:

gzip MyFile | touch MyFileComp
gzip MyFile >> MyFileComp

两个命令都会创建MyFileComp,但是当我打开文件时它是空的。当我尝试解压缩文件时,它显示未知后缀。我不知道这意味着什么。

非常感谢任何帮助。谢谢

答案1

我认为你没有正确压缩它。使用 -c 将其发送到 stdout 并在末尾添加“.gz”。这是问题所在吗?

gzip -c MyFile > MyFileComp.gz
gzip -d MyFileComp.gz

答案2

默认情况下,该工具在压缩命令行上指定名称的文件时gzip会创建一个带有文件名后缀的文件。.gz同样,当使用 解压缩文件时gzip -d,在命令行上给出压缩文件的名称,它期望.gz 在文件名末尾找到一个后缀,并将删除该后缀以创建未压缩数据的文件名。

如果您不想遵守这种行为,即您希望压缩文件根本没有文件名后缀,并且您想使用 解压缩这些文件gzip -d,那么您不能在命令行上将文件名指定为gzip。相反,让我们gzip从标准输入读取并写入标准输出。

压缩:

gzip <my_file >my_compressed_file

解压:

gzip -d <my_compressed_file >my_file

从技术上讲,您应该-c与上述两个命令一起使用,但由于gzip在命令行上没有给出文件名,因此它无论如何都会从标准输入读取并写入标准输出,并且这些流是通过重定向提供的。

另请注意,对于上述两个命令,源数据(无论是压缩命令的源还是解压缩命令的源)将保留在原处,而如果您gzip像平常一样使用该工具,则可以通过在命令行中,通常会删除源文件,除非使用-k( ) 选项。--keep


你的命令

gzip MyFile | touch MyFileComp

运行这两个命令gzip MyFile并且touch MyFileComp彼此独立。没有数据写入管道gzip,即使有,touch也不会读取它。您最终得到的是一个被调用的压缩文件MyFile.gz和一个被调用的空文件MyFileComp(假设该文件尚不存在)。文件MyFile被删除。

你的命令

gzip MyFile >> MyFileComp

压缩MyFileMyFile.gz和以前一样,并且由于gzip不向标准输出写入任何内容,因此它将创建空文件MyFileComp(假设该文件尚不存在)。文件MyFile被删除。

答案3

默认情况下,gzip -c将压缩为STDOUT,因此您可以将其重定向到您想要的任何文件名。您正在寻找的反转是zcat,因为gzip -dgunzip,即使尝试强制使用-f(从 1.6 开始),也拒绝在没有.gz

gzip -c MyFile > MyFileComp
zcat MyFileComp > MyFile

警告MyFile如果已经存在,这将被覆盖。

相关内容