Як витягнути лише певну папку з заархівованого архіву в заданий каталог?


59

Як можна витягувати певну папку із заархівованого архіву в заданий каталог?

Я спробував використовувати

unzip "/path/to/archive.zip" "in/archive/folder/" -d "/path/to/unzip/to"

але це лише створює папку на шляху, який я хочу, щоб її розпакувати і більше нічого не робить.

Відповіді:


60
unzip <target-zip-file> '<folder-to-extract/*>' -d <destination-path> 

прекрасно працює на EL 6


3
що це за EL 6?
Зельда

2
Enterprise Linux 6 (RHEL6) - Red Hat.
slm

Це теж працює; в основному така ж відповідь, як і Марка Адлера, але дещо по-іншому.
Enkouyami

@Enkouyami Мінус відмінностей в цитуванні, це схоже на те саме.
Каміло Мартін

1
@Enkouyami Оскільки зворотна косою рисою в подвійних лапках вдається уникнути символу (нібито зірочка уникає, але, мабуть, це помилка), тоді як в одинарних котируваннях зворотна косої риски не інтерпретується. Якщо "\\"ви хочете буквальний зворотний проріз, він буде використаний (інакше вам завжди слід пам’ятати, які символи - це спеціальні втечі). Отже, різниця в цитуванні, якщо автор мав на увазі "цитування глобального символу" (непотрібне). Так чи інакше, такий похилий зворотній кут - це друкарська помилка.
Каміло Мартін

39

Спробуйте:

unzip /path/to/archive.zip 'in/archive/folder/*' -d /path/to/unzip/to

4
зробив це? Я отримую, caution: filename not matched: foldername/\*коли біжу, unzip $repozip "$2-master/\*" -d /srv/www/magento/де $2ім'я папки на блискавці, я хочу витягнути всі файли та папки з
jeremy.bass

10
Працювали без \, просто "path/*".
Олексій

8
Чи існує спосіб вилучення вмісту "в / архів / папку / *", який не зберігає шлях "в / архів / папка /"? Після цього я використовую mvфайли там, де вони мені потрібні.
jerrygarciuh

6
Використовуйте -jдля цього.
Марк Адлер

4
-jзнімає всю інформацію про шлях, і всі файли переходять у цільову папку. Чи є спосіб видалити лише загальну частину шляху? Акін на блискавку -r.
Боб Штейн

6

Два існуючих відповіді є обома правильними, але вказати цільовий каталог трохи складно, що слід краще уточнити.

Скажімо, /target/root/це цільовий дір після оригінальної розпакування, наприклад:

unzip -qq src.zip -d "/target/root/"

Потім нам потрібно використовувати те саме /target/root/, що і цільовий dir згодом, хоча ми хочемо витягнути лише певний підкаталог, як працює розпакування:

unzip -qq src.zip "sub/dir/*" "/target/root/"

Зрештою, правило насправді просте, використовуйте ту саму цільову кореневу директорію для -dпараметра .

До речі, -qqопція полягає в тому, щоб розпакувати дійсно тихо, сміливо зніміть його.


FYI: Я зробив <kbd> unzip -qq 2.3.zip "magento2-2.3 / vendor / *" "vendor /" </kbd> і отримав <kbd> обережність: ім'я файлу не відповідає: vendor / `</kbd>. Це на установці ubuntu в bash. Я рідко розпаковував, напевно, щось інше зробив не так ...
Кріс К
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.