在管道上的命令行中创建zip时,如何指定其文件名?

我正在尝试从正在传递的文件内容中创建一个zip文件,例如

mysql [params and query] | zip -q output.zip -

这样可以正确写入zip,但是当您打开zip时,其中的文件称为“-”。有什么方法可以指定在zip中应该包含管道输入数据的文件名吗?

回答:

从我可以收集到的信息来看,您不能同时使用该zip命令,这意味着您既不能指定文件名也不能通过管道传递内容。您可以通过管道传输内容,结果文件为-,也可以通过管道传输文件名-@

这并不意味着使用其他技术是不可能的。我概述了以下内容之一。这确实意味着您必须安装PHP并加载zip扩展。

可能还有很多其他方式可以做到这一点。但这是我所知道的最简单的方法。哦,那也是单线的。

这是使用PHP的有效示例

echo contents | php -r '$z = new ZipArchive();$z->open($argv[1],ZipArchive::CREATE);$z->addFromString($argv[2],file_get_contents("php://stdin"));$z->close();' test.zip testfile

要在Windows上运行,只需交换单引号和双引号。或者只是将脚本放在文件中。

“ test.zip”是生成的Zip文件,“ testfile”是正在传递到命令中的内容的名称。

结果来自 unzip -l test.zip

Archive:  test.zip

Length Date Time Name

--------- ---------- ----- ----

6 01-07-2010 12:56 testfile

--------- -------

6 1 file

这是一个使用python的工作示例

echo contents | python -c "import sys

import zipfile

z = zipfile.ZipFile(sys.argv[1],'w')

z.writestr(sys.argv[2],sys.stdin.read())

z.close()

" test5.zip testfile2

的结果 unzip -l

Archive:  test5.zip

Length Date Time Name

-------- ---- ---- ----

9 01-07-10 13:43 testfile2

-------- -------

9 1 file

的结果 unzip -p

contents

以上是 在管道上的命令行中创建zip时,如何指定其文件名? 的全部内容, 来源链接: utcz.com/qa/412814.html

回到顶部