Linux解压缩命令:强制覆盖选项?


173

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

问题在于unzip命令要求确认:
replace jsp/extension/add-aspect.jsp? [y]es, [n]o, [A]ll, [N]one, [r]ename: y

是否有强制解压缩覆盖文件的选项?

Answers:


266

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

unzip -o /path/to/archive.zip

请注意-o,像大多数unzip的选项一样,必须在存档名称之前


1
例如:unzip -o ZIP_PATH,用作修饰符。
bonzofenix 2014年

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

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

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

@loretoparisi您在说什么?这是一个Linux问题。您是否正在寻找类似Expand-Archive的产品
富兰克林于

31

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

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    

使用您认为更适合自己的一种。


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

1
还看了看帮助,但不明白区别。-u update files, create if necessary-f freshen existing files, create none🤷‍♂️ 之间?
juanmirocks '18

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

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