在Linux上从zip存档中删除单个文件


75

我有一个zip存档(在带有-j -r标志的脚本中自动创建),我想从中删除一个文件。我尝试了记录。

zip -d "picture_43_9.jpg" gallery.zip

但是我得到这个错误:

zip warning: picture_43_9.jpg not found or empty   
zip error: Nothing to do! (picture_43_9.jpg)  

无论如何,有在归档中这样的文件,它不是空的:

unzip -l .../gallery.zip | grep -i 43_9.jpg  
1477092  2013-05-22 14:23   picture_43_9.jpg 

关于我在做什么错的任何想法吗?

Answers:


103

您已交换参数。尝试这个:

zip -d gallery.zip "picture_43_9.jpg" 

zip(1)手册页中:

-d
--delete
从zip存档中删除(删除)条目。例如:

zip  -d  foo  foo/tom/junk  foo/harry/\*  \*.o

将会删除条目foo/tom/junk,所有以开头的文件 foo/harry/以及所有以结尾的文件.o(在任何路径中)。请注意,使用反斜杠禁止了shell路径名的扩展,因此zip可以看到星号,从而使zip能够匹配zip存档的内容而不是当前目录的内容。(在基于MSDOS的平台上不使用反斜杠。)也可以使用引号将星号转义,如下所示:

zip -d foo foo/tom/junk "foo/harry/*" "*.o"

在外壳扩展通配符的系统上不转义星号可能会导致将星号转换为当前目录中的文件列表,并且该列表用于从存档中删除条目。

在MSDOS下,-dzip存档中的名称匹配时区分大小写。如果在MSDOS系统上使用PKZIP压缩了文件名,则要求输入的文件名必须大写。(我们认为做这种情况下在哪里路径是不区分大小写系统不灵敏,但可以存档来自哪里的情况下确实重要的系统和档案可以包括Barbar 与存档单独的文件。)但是看到新的选项- ic忽略存档中的大小写。


您说得对,谢谢,我对zip的命令行帮助感到困惑 zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
Alex Flo

@AlexFlo:您的手册页可能有错误的副本。上面引用的副本说“ [ zipfile [ file… ]]”,这意味着您完全可以没有(a)文件名参数(尽管我不知道这是如何有效的,除了在您寻求帮助时) ),(b)仅是一个zipfile(存档文件)名称,或(c)一个zipfile名称,后跟一个或多个普通文件名。(这些名称可以是要插入存档中的实际文件的名称,也可以是要操作的存档成员的名称。)
Scott

@AlexFlo- zip如引用的手册页所述,您可以通过STDIN和管道将文件名参数传递给。例如,如果您位于,,和的目录中file1.txt,则可以执行,这将创建包含3个文件的归档文件,这些文件通过管道传输到文件名完整无缺的位置。file2.txtfile3.txtls -1 | zip -q 'files.zip' -@files.zipzip
rubynorails 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.