Linux-Befehl zum Entpacken: Option zum Erzwingen des Überschreibens?

173

Ich schreibe ein Shell-Skript, das eine ZIP-Datei in eine vorhandene Hierarchie von Dateien entpackt und möglicherweise einige der Dateien überschreibt.

Das Problem ist, dass der Befehl unzip nach einer Bestätigung fragt:
replace jsp/extension/add-aspect.jsp? [y]es, [n]o, [A]ll, [N]one, [r]ename: y

Gibt es eine Option, um das Entpacken zu erzwingen, um die Dateien zu überschreiben?

Nicolas Raoul
quelle

Antworten:

266

Laut http://www.manpagez.com/man/1/unzip/ können Sie die -oOption zum Überschreiben von Dateien verwenden:

unzip -o /path/to/archive.zip

Beachten Sie, dass -o, wie die meisten von unzip‚s - Optionen gehen vor dem Archivnamen.

foraidt
quelle
1
zB: unzip -o ZIP_PATHarbeitet als Modifikator.
Bonzofenix
10
-oDie Option sollte vor allen anderen Argumenten verwendet werden. Beispiel:unzip -o /path/to/archive.zip -d /destination_dir
FelikZ
1
@FelikZ Danke für das Detail, ich habe dein (abgespecktes) Beispiel zur Antwort
hinzugefügt
Dies funktioniert nicht auf Azure-Websites (Windows).
Loretoparisi
@loretoparisi Worüber sprichst du? Dies ist eine Linux-Frage. Suchen Sie etwas wie Expand-Archive ?
Franklin Yu
31

Wenn Sie entpacken müssen, um nur die neuen Dateien zu ersetzen, können Sie verwenden

unzip -f archieve.zip

Für zukünftige Referenzen können Sie jedoch einfach eingeben

unzip 

und Sie erhalten eine Liste der Argumente für dieses Paket. Die möglichen Argumente für diesen Fall sind:

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

Verwenden Sie diejenige, die Sie für Ihre Bedürfnisse besser geeignet fühlen.

Prateek Shankar
quelle
6
+1, ich mag die subtilere, freundlichere Version von "hier ist, wie man für den Kontext rtfm, aber hier ist der relevante Abschnitt des M" -Ansatzes.
Nathan Basanese
1
Sah auch die Hilfe an, verstand aber den Unterschied nicht. zwischen -u update files, create if necessaryund -f freshen existing files, create none🤷‍♂️?
Juanmirocks
//, Der Unterschied liegt im Verhalten, wenn die Datei nicht existiert
Nathan Basanese
@juanmirocks Mit -f werden die neueren Dateien überhaupt nicht extrahiert, auch wenn sie sich nicht am Ziel befinden. Wenn Sie nicht bereits wissen, dass Sie das wollen, haben Sie wahrscheinlich keine Chance. Im Gegenteil, -u extrahiert zusätzliche Dateien, die sich nicht auf dem Ziel befinden, um sicherzustellen, dass auf dem Ziel, das sich in der Zip-Datei befindet, nichts fehlt.
Poikilos