我想用一个命令下载一个tar.gz
档案,然后解压并压缩成一个zip
文件。这样做是为了不受临时文件的影响。
我使用的命令:
curl -L "someURL" | tar xOzf - | zip -qr > /home/username/filename.zip
给我一个 zip 文件,其中包含名为 的文件-
。
从 tar 命令中删除后-
,我得到的 zip 文件仅包含下载文件的一小部分,但却是一个非常大的档案。
也许我在这里遗漏了一些东西......
答案1
您不需要使用-O
选项将下载的文件提取到标准输出,而是tar
可以使用选项提取下载的存档-v
。
它将在标准输出中打印提取的文件名及其完整路径,并将其通过管道传输到 zip。您的工作就完成了。
curl -L "http://someurl/some.tar.gz" | tar xvzf - | zip -qr /path/to/myfile.zip -@
这里文件列表指定为-@
,zip 从标准输入而不是命令行获取输入文件列表。要了解有关 zip 的更多信息,请参阅man zip
内容myfile.zip
如下:
myfile.zip
└──some
├── file1
├── file2
├── file3
└── folder
├── file4
├── file5
├── file6
└── file7
每个文件和文件夹都位于some
zip 根目录中的父文件夹内。
如何将所有文件和文件夹放入 zip 的根目录中
作为楼主问将所有文件放在 zip 的根目录中,与上面的情况不同,其中所有这些文件和文件夹都位于 zip 根目录中的文件夹中。
使用以下内容,
curl -L "http://someurl/some.tar.gz" | tar xvzf - --strip-components=1 && zip -qr /path/to/myfile.zip *
它将创建myfile.zpi
如下内容:
myfile.zip
├── file1
├── file2
├── file3
└── folder
├── file4
├── file5
├── file6
└── file7
该选项--strip-components=1
不tar
提取档案的第一个组件,即父文件夹。因此,所有文件和文件夹都将被提取到当前文件夹中。
您可能希望在一个空的临时文件夹中执行此操作。这样在创建 zip 文件后,您就可以清除残留物。