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

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

我有一个 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 

对我做错的事情有什么想法吗?

答案1

您已交换参数。尝试以下操作:

zip -d gallery.zip "picture_43_9.jpg" 

来自压缩(1)手册页:

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

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

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

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

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

在MSDOS下,-d当它匹配名称时区分大小写压缩档案。这要求如果文件名是在 MSDOS 系统上使用 PKZIP 压缩的,则文件名必须以大写形式输入。(我们考虑在路径不区分大小写的系统上不区分大小写,但档案可能来自区分大小写的系统,档案可能同时包含Barbar 作为档案中的单独文件。)但看到新选项-我知道了忽略档案中的大小写。

相关内容