Zip arsip tanpa menyertakan direktori induk


30

Saya ingin zip banyak folder di pohon direktori seperti itu

V-
 something.txt
 folder
 folder
 g.jpg
 h.jar

Ketika saya mencoba zip, itu berakhir membuat arsip zip dengan folder v alih-alih isinya (sub direktori dan file)

Bagaimana saya bisa menghindari ini?

Jawaban:


23

Jadi jika saya mengerti dengan benar, Anda mencoba mengarsipkan file & folder di folder tertentu tetapi tanpa menyertakan folder root.

Contoh:

/test/test.txt
/test/test2.txt

di mana test.txt dan test2.txt akan disimpan di zip, tetapi tidak / test /

Anda bisa cd ke direktori / test / lalu jalankan sesuatu seperti,

zip -r filename.zip ./*

Yang akan membuat arsip di folder yang sama bernama filename.zip. Atau jika menjalankannya dari luar folder yang bisa Anda jalankan,

zip -r test.zip test/*

/ * Adalah bagian yang hanya mencakup konten folder, bukan seluruh folder.

Sunting: OP ingin beberapa ritsleting, solusi akhirnya menjadi sedikit peretasan, saya ingin tahu apakah ada cara yang lebih baik untuk melakukan ini.

for d in */ ; do base=$(basename "$d") ; cd $base ; zip -r $base * ; mv "${base}.zip" .. ; cd .. ; done;

ya tapi saya punya banyak file yang saya lakukan hal yang sama sehingga akan membosankan melakukannya seperti itu sehingga ada seperti skrip bash atau sesuatu yang akan mengotomatisasi proses yang sama pada direktori yang memiliki semua folder
Dami

1
Ok saya menjalankan skrip dan menciptakan direktori induk dalam arsip saya hanya ingin isi folder berada di arsip
Dami

1
kesalahan saya, sedikit melewatkannya. menambahkan parameter -j yang baru saja saya cari, ternyata melewatkan bagian yang tidak Anda inginkan. coba ini:for d in */ ; do base=$(basename "$d") ; zip -rj "${base}.zip" "$d" ; done;
zzbomb

18
zip -r test.zip test / * dari luar menambahkan test sebagai direktori ke dalam file zip
smihael

4
seperti yang dikatakan @smihael, zip -r test.zip test/*tidak bekerja. Adakah cara yang benar untuk mencapai ini dari luar direktori?
andrhamm

22

Gunakan opsi -jatau --junk-pathsdalam perintah zip Anda.

Dari halaman manual zip :

-j

--junk-paths

Store just the name of a saved file (junk the path), and do not store directory 
names. By default, zip will store the full path (relative to the current 
directory).

Tampaknya ini jawaban yang benar.
mutant_city

3
Bagaimana dengan nested paths / folder?
GuyPaddock

3
Ini akan menghilangkan semua folder dalam arsip, dan jika Anda memiliki nama file duplikat di folder yang berbeda, ini akan meledak. Ini tempatnya, tetapi hanya jika Anda tidak peduli dengan folder dan hanya ingin file. Bukan apa yang diminta OP, tapi masih pengetahuan bagus
Govind Rai

17

Bagaimana dengan perintah ini?

$ cd somedir ; zip -r ../zipped.zip . * ; cd ..

5
Meskipun ini adalah jawaban yang benar, perkenalannya tidak terdengar seperti Anda yakin sendiri. Ini juga akan membantu menjelaskan sedikit, apa perintahnya.
Nephente

1
Ini juga solusi saya, tetapi saya tidak suka karena itu melibatkan cd. Berharap ada cara untuk menentukan jalur tersimpan lebih tepat.
nilskp

3

Semoga ini membantu.

(cd directory && zip -r ../out.zip .)

Itu membuat shell utama dalam direktori yang sama dan hanya mengubah direktori sub-shell yang mati setelah perintah.


Saya ingin menambahkan ini sebagai komentar untuk jawaban @Alfred UC tetapi saya tidak memiliki reputasi yang cukup untuk itu.
Kenneth

Jika itu benar-benar menyelesaikan masalah, maka itu bisa menjadi solusi.
Yufenyuy Veyeh Dider

Ini lebih baik sebagai jawaban. Apakah ini bekerja di bash dan sh?
Arlen Beiler
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.