Jawaban:
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;
for d in */ ; do base=$(basename "$d") ; zip -rj "${base}.zip" "$d" ; done;
zip -r test.zip test/*
tidak bekerja. Adakah cara yang benar untuk mencapai ini dari luar direktori?
Gunakan opsi -j
atau --junk-paths
dalam 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).
Bagaimana dengan perintah ini?
$ cd somedir ; zip -r ../zipped.zip . * ; cd ..
cd
. Berharap ada cara untuk menentukan jalur tersimpan lebih tepat.
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.