我有一个 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 压缩的,则文件名必须以大写形式输入。(我们考虑在路径不区分大小写的系统上不区分大小写,但档案可能来自区分大小写的系统,档案可能同时包含
Bar
和bar
作为档案中的单独文件。)但看到新选项-我知道了忽略档案中的大小写。