我正在编写一个Shell脚本,该脚本将ZIP文件解压缩到现有文件层次结构中,有可能覆盖某些文件。

问题是unzip命令要求确认: br />是否可以选择强制解压缩以覆盖文件?

#1 楼

根据http://www.manpagez.com/man/1/unzip/,您可以使用-o选项覆盖文件:

unzip -o /path/to/archive.zip


请注意,-o类似于unzip的大多数选项都必须位于存档名称之前。

评论


例如:解压缩-o ZIP_PATH,用作修饰符。

– Bonzofenix
14年7月21日在22:35

-o选项应该在任何其他参数之前使用。示例:解压缩-o /path/to/archive.zip -d / destination_dir

– FelikZ
15年5月28日在8:48

@FelikZ感谢您提供详细信息,我将您的示例(简化后的示例)添加到了答案中

– foraidt
15年5月28日在11:57

这在Azure网站(Windows)上不起作用。

– loretoparisi
16年8月25日在14:28

@loretoparisi您在说什么?这是一个Linux问题。您是否正在寻找类似Expand-Archive的内容?

–于富兰
18年1月9日在14:46

#2 楼

如果您需要解压缩以仅替换新文件,则可以使用

unzip -f archieve.zip


,但是为了将来参考,您可以键入

unzip 


,您将获得此软件包的参数列表。
在这种情况下可能使用的参数是:

-f  freshen existing files, create none
-n  never overwrite existing files         
-q  quiet mode (-qq => quieter)
-o  overwrite files WITHOUT prompting    


使用您认为更适合自己的参数。

评论


+1,我喜欢更微妙,更友好的版本,“这是在上下文中使用rtfm的方法,但这是m的相关部分”。

– Nathan Basanese
17年5月9日在21:23

还看了看帮助,但不明白区别。在-u更新文件之间,如有必要,创建-f刷新现有文件,不创建任何文件🤷‍♂️?

– juanmirocks
18年4月26日在7:44

//,如果文件不存在,则区别在于行为

– Nathan Basanese
18年5月24日在18:53

@juanmirocks使用-f,即使它们不在目标位置,也根本不会提取较新的文件(例如,如果创建的zip的更高版本包含以前的unzip并未创建的文件)。如果您还不知道自己想要那个,那很可能就是您不想要。相反,-u将提取目标以外的其他文件,以确保zip中的目标没有丢失。

– Poikilos
19年2月22日在21:10