在Linux上是否有任何命令将.tar.gz文件转换为.zip?

nar*_* ss 3 linux zip tar

我收到了.tar.gz类型的文件,但我使用的应用程序只接受.zip文件.我需要一种简单的方法将.tar.gz文件转换为.zip而不会丢失任何数据.

重命名为.zip会有效吗?我已经尝试了但是当我点击文件时它会将其显示为无效文件.

对此有何想法或意见?

Qeo*_*ole 8

您可以使用与此类似的命令将存档foo.tar.gz转换为压缩存档foo.zip:

tar xzOf foo.tar.gz | zip foo.zip $(tar tf foo.tar.gz)

详细信息:tar xzOf foo.tar.gzextract(x)将gzipped(z)归档到标准输出(O).这里f用于提供输入文件名.

标准输入是管道输入zip,其第一个参数是要生成的压缩文件的名称.下面的参数是文件列表进行压缩,我们就可以直接获得tart 命令,初始运行.tar.gz文件.

编辑:我认为上面的单行可以用来轻松地将tar档案转换为zip文件.一年后左右再次读取命令,结果看起来很糟糕:它只是从tar存档中获取文件的名称,并从原始文件(非压缩)压缩,如果它们仍在磁盘上.我不知道如何生成一个简单的单行,因为你显然无法zip在命令行上同时提供文件的名称和内容(另请参阅此问题及其答案).

因此,我们可能需要两个步骤来执行此操作:首先从tar存档解压缩,然后再次压缩.就像是:

tar xzf foo.tar.gz && zip foo.zip $(tar tf foo.tar.gz)
Run Code Online (Sandbox Code Playgroud)

我们还可以添加第三部分来删除暂时解压缩的文件:&& rm -r -- $(tar tf foo.tar.gz)但要小心并确保这不会删除您想要保留的内容.

有关更多详细信息,请查看手册页ziptar实用程序.

  • 如果您正在处理包含大量文件(80k+)的存档,您可能会遇到“参数列表太长”错误。快速的解决方案是让“zip”从标准输入读取文件列表,如下所示:“tar tf foo.tar.gz |” zip -@rj foo.zip` (3认同)