Zip file tanpa menyertakan direktori induk

12

Saya memiliki folder yang berisi banyak file

map

  • artifact1.app
  • artifact2.ext2
  • artifact3.ext3
  • ...

Tujuan saya adalah untuk zip file dari luar folder ini (tanpa menggunakan cdperintah) tanpa menyertakan direktori dir.

zip -r ./folder/artifact.zip ./folder/artifact1.app

Perintah ini termasuk folder dir di zip terakhir. Ada petunjuk?

Pertanyaan terkait: Zip isi folder tanpa menyertakan folder itu sendiri

Lorenzo B
sumber
1
Dari halaman manual, sepertinya hanya -jakan berlaku, dan itu akan memampatkan semua folder menjadi direktori tingkat root tunggal dalam ZIP. Bukan itu yang Anda cari, bukan?
phyrfox
@ phyrfox Mungkin ya. Perlu memverifikasinya. Terima kasih.
Lorenzo B

Jawaban:

13

Jika Anda ingin menyimpan semua file folderdengan nama mereka tanpa indikasi direktori, Anda dapat menggunakan -jopsi.

zip -j folder/artifact.zip folder/artifact1.app folder/artifact2.ext2 folder/artifact3.ext3

atau

zip -j folder/{artifact.zip,artifact1.app,artifact2.ext2,artifact3.ext3}

Jika Anda memiliki file dalam subdirektori, mereka juga tidak akan memiliki komponen direktori dalam arsip, misalnya folder/subdir/fooakan disimpan dalam arsip sebagai foo.

Tetapi mungkin akan lebih mudah untuk mengubah ke direktori. Jumlah pengetikannya hampir sama dengan metode brace aboe. Jika Anda melakukannya, jika Anda memasukkan file dalam subdirektori, mereka akan memiliki jalur relatifnya dari direktori tempat Anda mengubahnya, misalnya folder/subdir/fooakan disimpan sebagai subdir/foo.

(cd folder && zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3)

Untuk penggunaan interaktif, Anda kehilangan penyelesaian shell dengan cara ini, karena shell tidak menyadari bahwa Anda akan berada di direktori yang berbeda ketika Anda menjalankan zipperintah. Untuk mengatasinya, keluarkan cdperintah secara terpisah. Untuk dengan mudah kembali ke direktori sebelumnya, Anda dapat menggunakan pushddan popd.

pushd folder
zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3
popd

Jika Anda ingin kontrol penuh atas jalur yang disimpan dalam file zip, Anda bisa membuat hutan tautan simbolik. Kecuali diinstruksikan sebaliknya, ziptidak menyimpan tautan simbolik.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Anda tidak perlu mencantumkan secara eksplisit semua file di subdirektori ( folder), Anda cukup menggunakan wildcard, yaituzip -j folder/*
Jakub Kukul
Mengandalkan ekspansi shell berarti dotfiles (mis. .profile) Tidak akan dimasukkan dalam arsip. Alih-alih, ubah direktori kerja saat ini dan tentukan .sebagai file yang akan diarsipkan:cd folder && zip -r ../folder.zip .
sheldonh