Polecenie unzip Linux: Opcja wymuszenia zastąpienia?

173

Piszę skrypt powłoki, który rozpakowuje plik ZIP do istniejącej hierarchii plików, potencjalnie nadpisując niektóre pliki.

Problem polega na tym, że polecenie unzip prosi o potwierdzenie:
replace jsp/extension/add-aspect.jsp? [y]es, [n]o, [A]ll, [N]one, [r]ename: y

Czy istnieje opcja wymuszenia rozpakowania w celu zastąpienia plików?

Nicolas Raoul
źródło

Odpowiedzi:

266

Zgodnie z http://www.manpagez.com/man/1/unzip/ możesz użyć -oopcji zastępowania plików:

unzip -o /path/to/archive.zip

Zauważ, że -opodobnie jak większość unzipopcji, musi poprzedzać nazwę archiwum.

foraidt
źródło
1
np .: unzip -o ZIP_PATHdziała jako modyfikator.
bonzofenix
10
-oOpcja powinna być używana przed innymi argumentami. Przykład:unzip -o /path/to/archive.zip -d /destination_dir
FelikZ
1
@FelikZ Dziękuję za szczegóły, dodałem twój (uproszczony) przykład do odpowiedzi
foraidt
nie działa to w witrynach internetowych platformy Azure (Windows).
loretoparisi,
@loretoparisi O czym ty mówisz? To jest pytanie o Linuksa. Szukasz czegoś takiego jak Expand-Archive ?
Franklin Yu
31

Jeśli musisz rozpakować, aby zastąpić tylko nowe pliki, możesz użyć

unzip -f archieve.zip

Ale w przypadku przyszłych referencji możesz po prostu pisać

unzip 

a otrzymasz listę argumentów dla tego pakietu. Możliwe argumenty w tym przypadku to:

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

Wybierz ten, który wydaje Ci się bardziej odpowiedni dla Twoich potrzeb.

Prateek Shankar
źródło
6
+1, podoba mi się bardziej subtelna, bardziej przyjazna wersja „oto jak rtfm dla kontekstu, ale tutaj jest odpowiednia sekcja podejścia m”.
Nathan Basanese
1
Spojrzałem również na pomoc, ale nie zrozumiałem różnicy. pomiędzy -u update files, create if necessarya -f freshen existing files, create none🤷‍♂️?
juanmirocks
// Różnica polega na zachowaniu, jeśli plik nie istnieje
Nathan Basanese
@juanmirocks Przy opcji -f nowsze pliki nie zostaną w ogóle wyodrębnione, nawet jeśli nie znajdują się w miejscu docelowym (na przykład, jeśli tworzona jest późniejsza wersja pliku zip, która zawiera pliki, których nie utworzył poprzedni rozpakowanie). Jeśli jeszcze nie wiesz, że tego chcesz, prawdopodobnie nie. Wręcz przeciwnie, -u wyodrębni dodatkowe pliki poza miejscem docelowym, upewniając się, że niczego nie brakuje w miejscu docelowym, które znajduje się w zipie.
poikilos