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

Ale*_*Flo 93 linux zip

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

zip -d "picture_43_9.jpg" gallery.zip
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

zip warning: picture_43_9.jpg not found or empty   
zip error: Nothing to do! (picture_43_9.jpg)  
Run Code Online (Sandbox Code Playgroud)

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

unzip -l .../gallery.zip | grep -i 43_9.jpg  
1477092  2013-05-22 14:23   picture_43_9.jpg 
Run Code Online (Sandbox Code Playgroud)

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

jay*_*ngh 135

你交换了参数。尝试这个:

zip -d gallery.zip "picture_43_9.jpg" 
Run Code Online (Sandbox Code Playgroud)

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"

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

在 MSDOS 下,-d在匹配zip存档中的名称时区分大小写。如果文件名在 MSDOS 系统上由 PKZIP 压缩,则这要求以大写形式输入文件名。(我们考虑过在路径不区分大小写的系统上不区分大小写,但存档可能来自一个大小写很重要的系统,并且存档可以同时包含Barbar 作为存档中的单独文件。)但请参阅新选项- ic忽略存档中的大小写。