
Это очень близко к SOКак извлечь только определенную папку из архива в указанный каталог? Мне нужно что-то близкое, но я всегда получаю папку с содержимым, а не только ее содержимое. Вот что было предложено:
#note $2 is passed in and would be == "magefoler"
unzip /srv/file.zip "$2-master/*" -d /srv/www/mage/
Что мне нужно сделать, чтобы взять молнию, которая имеет такую структуру
file.zip
|-magefoler-master/
|-magefoler-master/app/*tons of files
|-magefoler-master/skin/*tons of files
и мне нужно переместить его в другую папку, но я не могу переместить magefoler
, мне нужны только папки app
и skin
. Это не значит, что это всегда будут эти две папки, просто любой дочерний контент, файлы или папки в — это то, magefoler
что мне нужно вытащить. Чего пытаются избежать, так это экспортировать все в папку, а затем просто переместить оттуда.
Конечный результат, который я ищу, получается из zip-файла, который я вывожу в /mage
папку следующим образом:
/srv/www/mage/
|--/mage/app/*tons of files
|--/mage/skin/*tons of files
решение1
А нельзя ли просто распаковать сюда:
$ unzip /srv/file.zip "$2-master/*" -d /srv/www/
А затем переместите/переименуйте папку magefoler-master
в mage
:
$ mv /srv/www/magefoler-master /srv/www/mage
Альтернативы?
Исследуя эту проблему в прошлом, я смог найти только 2 дополнительных метода сделать что-то подобное, не прибегая к использованию mv
.
- Используем FUSE, как предлагает Жиль:Как заставить unzip / zip не создавать подкаталог при распаковке?
- Использование инструмента
zipnote
для перемещения файлов внутри zip-архива перед их извлечением.