Bagaimana cara mengekstrak hanya folder tertentu dari arsip zip ke direktori yang diberikan?

59

Bagaimana cara mengekstrak folder tertentu dari arsip zip ke direktori yang diberikan?

Saya mencoba menggunakan

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

tetapi itu hanya membuat folder di jalur yang saya inginkan untuk unzip dan tidak melakukan hal lain.

Enkouyami
sumber

Jawaban:

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

berfungsi dengan baik pada EL 6

menuntut
sumber
3
apa EL 6 ini?
Zelda
2
Enterprise Linux 6 (RHEL6) - Red Hat.
slm
Ini juga berfungsi; pada dasarnya jawaban yang sama dengan Mark Adler, tetapi dengan cara yang sedikit berbeda.
Enkouyami
@Enkouyami Minus perbedaan dalam mengutip, sepertinya hal yang persis sama.
Camilo Martin
1
@Enkouyami Karena backslash dalam tanda kutip ganda lolos dari karakter (seharusnya tanda bintang sedang melarikan diri, tapi saya kira itu kesalahan ketik), sedangkan dalam tanda kutip tunggal backslash tidak diartikan. Jika seseorang menginginkan backslash literal, "\\"akan digunakan (kalau tidak Anda harus selalu ingat karakter mana yang lolos khusus). Jadi perbedaan mengutip jika penulis berarti "mengutip karakter glob" (tidak perlu). Either way satu backslash seperti itu adalah kesalahan ketik.
Camilo Martin
39

Mencoba:

unzip /path/to/archive.zip 'in/archive/folder/*' -d /path/to/unzip/to
Mark Adler
sumber
4
melakukan ini? Saya dapatkan caution: filename not matched: foldername/\*ketika saya menjalankan di unzip $repozip "$2-master/\*" -d /srv/www/magento/mana $2nama folder di zip saya ingin menarik semua file dan folder dari
jeremy.bass
10
Bekerja tanpa \, adil "path/*".
Alex
8
Apakah ada cara untuk mengekstrak konten "di / arsip / folder / *" yang tidak mempertahankan path "di / arsip / folder /"? Saya akhirnya menggunakan mvsetelah itu untuk mendapatkan file di mana saya membutuhkannya.
jerrygarciuh
6
Gunakan -juntuk itu.
Mark Adler
4
-jmenghapus semua info jalur, dan semua file masuk ke folder target. Apakah ada cara untuk menghapus hanya bagian umum dari jalur? Ingin melakukan zip -r.
Bob Stein
6

Dua jawaban yang ada sama-sama benar, tetapi agak sulit untuk menentukan direktori target, yang harus diklarifikasi dengan lebih baik.

Katakanlah /target/root/target diarahkan pada tindakan unzip yang asli, misalnya:

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

Kemudian, kita perlu menggunakan yang sama /target/root/dengan target dir sesudahnya walaupun kita ingin mengekstrak hanya sub-direktori tertentu, seperti cara unzip bekerja:

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

Lagi pula, aturannya sebenarnya sederhana, gunakan direktori root target yang sama untuk -dopsi .

BTW, -qqopsinya adalah agar unzip benar-benar senyap, jangan ragu untuk menghapusnya.

Ryenus
sumber
FYI: Saya melakukan <kbd> unzip -qq 2.3.zip "magento2-2.3 / vendor / *" "vendor /" </kbd> dan mendapat <kbd> hati-hati: nama file tidak cocok: vendor / `</kbd>. Ini pada instalasi ubuntu di bash. Saya jarang membuka ritsleting, mungkin melakukan sesuatu yang salah ...
Chris K