当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在管道的命令行上创建文件名时,如何在zip中指定文件名?》经验,为你挑选了4个好方法。

我正在尝试从正在管道输入的文件内容创建一个zip文件,例如

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

这会正确写入zip,但是当您打开zip时,其中的文件称为" - ".有没有办法指定数据中管道的文件名应该在zip中?



1> Didier Tross..:

您可以使用命名管道,并将请求输出发送给它,同时从中拉出.

mkfifo output.txt ; mysql [params and query] > output.txt & zip output.zip -FI output.txt ; rm output.txt



2> Arto Uusikan..:

你可以这样做.

ls | zip test.zip -@

这是从我在dir中有3个文件的概念完成的.

-rw-rw-r-- 1 xxx domain users   6 Jan  7 11:41 test1.txt
-rw-rw-r-- 1 xxx domain users   6 Jan  7 11:41 test2.txt
-rw-rw-r-- 1 xxx domain users   6 Jan  7 11:41 test3.txt

和文件本身,然后结果

Archive:  test.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        6  01-07-10 11:41   test1.txt
        6  01-07-10 11:41   test2.txt
        6  01-07-10 11:41   test3.txt
 --------                   -------
       18                   3 files

从Linux Zip Man页面

如果文件列表指定为 - @,则zip从标准输入中获取输入文件列表.


谢谢 - 当它是几个文件管道输入时,它确实有效,但在这种情况下,我正在管道文件的_contents_(在这种情况下,制表符分隔MySQL结果).Zip很聪明,可以将其视为一个文件,但我需要知道如何告诉它在它创建的zip文件中调用这些内容的内容.

3> azenet..:

我无法处理PHP答案(更大的mysql转储内存不足),并且FIFO无法正常工作,所以我的解决方案是在运行转储后使用zipnote重命名ZIP存档中的文件(包含在Debian上的zip包中.

mysql [params and query] | zip -q output.zip -
echo -e "@ -\n@=newname.sql" | zipnote -w output.zip



4> Peter Lindqv..:

从我可以收集到的内容中,您不能同时使用该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

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有