我正在尝试获取一个包含文本的文件,名为,并将其压缩到同一目录中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
压缩MyFile
到MyFile.gz
和以前一样,并且由于gzip
不向标准输出写入任何内容,因此它将创建空文件MyFileComp
(假设该文件尚不存在)。文件MyFile
被删除。
答案3
默认情况下,gzip -c
将压缩为STDOUT
,因此您可以将其重定向到您想要的任何文件名。您正在寻找的反转是zcat
,因为gzip -d
或gunzip
,即使尝试强制使用-f
(从 1.6 开始),也拒绝在没有.gz
gzip -c MyFile > MyFileComp
zcat MyFileComp > MyFile
警告:MyFile
如果已经存在,这将被覆盖。