curl 到 tar 到 zip 无法正常工作

curl 到 tar 到 zip 无法正常工作

我想用一个命令下载一个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

每个文件和文件夹都位于somezip 根目录中的父文件夹内。

如何将所有文件和文件夹放入 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=1tar提取档案的第一个组件,即父文件夹。因此,所有文件和文件夹都将被提取到当前文件夹中。

您可能希望在一个空的临时文件夹中执行此操作。这样在创建 zip 文件后,您就可以清除残留物。

相关内容