Saya memiliki file myarchive.zip yang berisi banyak direktori, file, dll. Katakanlah file myarchive.zip ini hidup di direktori yang disebut "b". Nah, ketika saya menggunakan perintah "unzip myarchive.zip", sistem membuat direktori secara default disebut "myarchive" dengan isi file zip. Saya tidak ingin sistem membuat direktori "myarchive" ini - saya hanya ingin kontennya diekstraksi ke direktori "b". Apakah ini mungkin?
Apa yang saya lakukan sekarang hanyalah mengeluarkan perintah "cp" untuk menyalin file dari direktori yang baru dibuat (dalam hal ini "myarchive" ke "b") ke tempat yang saya inginkan.
unzip
tidak membuat direktori. File zip Anda mungkin memiliki direktori di tingkat atas.mv
bukancp
.mv archive/* .; rmdir archive/
atau serupa.Jawaban:
Versi saya
unzip
memiliki-j
opsi untuk tidak membuat direktori apa pun.Begitu
Akan mengekstrak semua file ke direktori saat ini tanpa mengembalikan struktur direktori yang tersimpan dalam
zip
file.Jika Anda hanya ingin menghapus satu tingkat direktori dari arsip, (ekstrak
myarchive/dir/file
sebagaidir/file
, bukanfile
), Anda dapat menggunakanbsdtar
(yang mendukungzip
file selaintar
file) sebagai gantinya dan-s
opsinya.sumber
-j
struktur direktori arsip tidak dibuat ulang dan semua file disimpan dalam folder ekstraksi. Ini berarti SEMUA subfolder dijatuhkan. Jadi jika Anda mauzip/A/f1
,zip/A/B/f2
danzip/A/B/C/f3
Anda akan berakhir dengan satu folder dengan f1, f2, f3. Menjadi funky jika Anda memiliki file dengan nama yang sama di subfolder yang berbeda. Biasanya Anda hanya ingin meletakkan folder teratas bukan seluruh struktur direktori.Sepertinya ini sangat sederhana dengan bsdtar :
bsdtar --strip-components=1 -xvf file.zip
sumber
Apa jawaban yang diterima tidak menentukan cara melakukannya, seperti yang Anda katakan dalam pertanyaan, jika Anda masih ingin mengekstrak ke folder tertentu tanpa menggunakan jalur folder yang disimpan dalam file zip, Anda dapat menggunakan
-j
opsi dengan-d
opsi dengan cara ini :atau untuk kasus Anda
sumber
Jika berkinerja
unzip myarchive.zip
menghasilkan direktorimyarchive
dengan semua yang ada di dalamnya, maka itu berarti pencipta file zip benar-benar melakukan zip pada direktori itu.Satu-satunya cara untuk membuat apa yang Anda inginkan adalah memindahkan semua konten di luar direktori setelah Anda melakukan
unzip
:[user@host]:some/path/b$ unzip myarchive.zip
[user@host]:some/path/b$ ls
{ menunjukkan direktorimyarchive
}[user@host]:some/path/b$ mv myarchive/* .
[user@host]:some/path/b$ rm -R myarchive
[user@host]:some/path/b$ ls
{ menunjukkan tingkat pertama myarchive (langsung masukb
) }sumber
mv myarchive/.* .
memindahkan semua file yang tersembunyi seperti .gitignore dan .htaccess.rm -R
dan karena Anda tidak menggunakanls -a
Anda tidak menunjukkan jika ada file titik; sekarang apa yang terjadi ketika Anda menjalankanrm -R
dan ada file dot? Anda belum menyalinnya sehingga hilang. Anda benar-benar harus memperbaikinya dan mungkin menjelaskan perbedaannya karena itu adalah sesuatu yang akan menjebak pemula cukup banyak; dan pertimbangkan ini: bagaimana jika itu bukan arsip yang mereka miliki? Atau bagaimana jika mereka menambah perintah untuk menghapus arsip setelah itu tidak dikompresi?rmdir
akan memastikan itu kosong dulu ... Tetapi jika pengguna tidak tahu tentang file dot itu akan membingungkan mereka.