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?

Dami
sumber

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;
zzbomb
sumber
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).
robrtsql
sumber
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 ..
aluc
sumber
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.

Kenneth
sumber
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