Разархивируйте содержимое файла, но без создания папки архива

У меня есть файл myarchive.zip, который содержит много каталогов, файлов и т. Д. Скажем, этот файл myarchive.zip живет в каталоге с именем «b». Ну, когда я использую команду «unzip myarchive.zip», система создает каталог по умолчанию «myarchive» с содержимым zip-файла. Я не хочу, чтобы система создавала этот каталог «myarchive» – я просто хочу, чтобы содержимое было извлечено в каталог «b». Это возможно?

То, что я делаю сейчас, просто выдает команду «cp», чтобы скопировать файлы из вновь созданного каталога (в данном случае «myarchive» в «b») туда, где я их хочу.

Моя версия unzip имеет параметр -j чтобы не создавать какой-либо каталог.

Так

 unzip -j /path/to/file.zip 

Извлечет все файлы в текущий каталог без восстановления структуры каталога, хранящейся в zip файле.

Если вы хотите удалить только один уровень каталогов из архива (извлеките myarchive/dir/file как dir/file , а не file ), вы можете использовать bsdtar (который поддерживает файлы zip в дополнение к файлам tar ), а его -s .

 bsdtar -xf /path/to/file.zip -s'|[^/]*/||' 

Если выполнение unzip myarchive.zip создает каталог myarchive со всем в нем, то это означает, что создатель zip-файла фактически выполнил zip в этом каталоге.

Единственный способ создать то, что вы хотите, – просто перемещать все содержимое за пределами каталога после выполнения unzip :

[user@host]:some/path/b$ unzip myarchive.zip

[user@host]:some/path/b$ ls { показывает каталог myarchive }

[user@host]:some/path/b$ mv myarchive/* .

[user@host]:some/path/b$ rm -R myarchive

[user@host]:some/path/b$ ls { показывает первый уровень myarchive (непосредственно в b ) }