Команда Linux unzip: опция принудительной перезаписи?

173

Я пишу сценарий оболочки, который распаковывает ZIP-файл в существующую иерархию файлов, потенциально перезаписывая некоторые файлы.

Проблема в том, что команда unzip запрашивает подтверждение:
replace jsp/extension/add-aspect.jsp? [y]es, [n]o, [A]ll, [N]one, [r]ename: y

Есть ли возможность принудительно разархивировать файлы для перезаписи?

Николас Рауль
источник

Ответы:

266

Согласно http://www.manpagez.com/man/1/unzip/ вы можете использовать -oопцию для перезаписи файлов:

unzip -o /path/to/archive.zip

Обратите внимание, что -o, как и большинство unzipпараметров, необходимо указывать перед именем архива.

foraidt
источник
1
Например: unzip -o ZIP_PATHработает как модификатор.
bonzofenix
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 При использовании -f более новые файлы не будут извлечены вообще, даже если они не находятся в месте назначения (например, если создается более поздняя версия zip, в которой есть файлы, которые не были созданы предыдущим разархивированным файлом). Если вы еще не знаете, что хотите этого, скорее всего, нет. Напротив, -u будет извлекать дополнительные файлы не в месте назначения, гарантируя, что ничего не пропущено в месте назначения, которое находится в zip.
пойкилось