Linux: Menentukan direktori tingkat atas saat membuat arsip zip

17

Saya punya proyek dengan struktur direktori yang biasa (src /, bin /, ...), yaitu

project-name/
|-- bin
|-- lib
|-- src
`-- Makefile

Dan ingin membuat arsip dengan struktur direktori berikut:

project-name-version/
|-- bin
|-- lib
|-- src
`-- Makefile

Apakah ada cara yang rapi untuk melakukan ini, yang menghindari membuat direktori sementara di project-name/tempat lain, kemudian menyalin file di dalam akhirnya memanggil zip -r ...direktori sementara itu?

(Pada dasarnya saya mencari beberapa jenis awalan jalur atau opsi jalur relatif.)

leden
sumber

Jawaban:

9

Mungkin ini sudah terjadi pada Anda, tetapi mengapa tidak menggunakan tautan sym daripada menyalin semuanya?

ln -s project-name project-name-version

kemudian gunakan zip -rmelalui tautan sym ( zipapakah dereference sym links secara default)? Setelah selesai, Anda dapat dengan mudah rmtautan sym. Mungkin itu bukan solusi yang paling elegan, tapi saya tidak tahu cara yang jelas untuk melakukannya secara ziplangsung.

Kesalahan fatal
sumber
1
Ini juga berfungsi dengan tarjika Anda menggunakan -hbendera.
Kyle Strand
(Saya juga menggunakan zbendera; Saya tidak yakin apakah itu memengaruhinya.)
Kyle Strand
15

Ini lebih merupakan saran daripada jawaban: gunakan Git !

Jika Anda menyiapkan repositori Git untuk proyek Anda, semuanya menjadi sangat mudah:

git archive HEAD --prefix=project-name-version/ \
    --format=zip -o project-name-version.zip
cYrus
sumber
1
Nasihat yang bagus, terima kasih. dokumentasi arsip git: git-scm.com/docs/git-archive
Meglio
1
Meskipun menggunakan kontrol versi adalah ide yang bagus, jawaban ini tidak cocok dengan pertanyaan untuk kasus umum.
raimue
@Raim "Ini lebih merupakan saran daripada jawaban: gunakan Git!" ditulis di sana sejak 4 tahun, terima kasih telah menunjukkannya ...
cYrus
1
Jika ini tidak dimaksudkan sebagai jawaban, itu harus dikonversi menjadi komentar.
raimue
1
@ Gregor Saya pikir itu perilaku yang diinginkan karena file seperti itu sebenarnya bagian dari proyek, toh Anda dapat menggunakan atribut Git, misalnya, membuat file bernama .gitattributesmengandung .git* export-ignore.
cYrus