Linux: Zip arşivi oluştururken üst düzey dizini belirtme


17

Ben her zamanki dizin yapısı (src /, bin /, ...), yani proje var

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

Ve aşağıdaki dizin yapısına sahip bir arşiv oluşturmak istiyorum:

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

Bunu yapmanın temiz bir yolu var, bu da project-name/başka bir yerde geçici bir dizin oluşturmaktan , daha sonra zip -r ...bu geçici dizini çağıran bir dosyanın içindeki dosyaları kopyalamaktan kaçınıyor mu?

(Temel olarak bir tür yol öneki veya göreli yol seçeneği arıyorum.)

Yanıtlar:


9

Belki bu zaten sizin başınıza geldi, ama neden her şeyi kopyalamak yerine sadece bir sym bağlantısı kullanmıyorsunuz?

ln -s project-name project-name-version

sonra zip -rsym bağlantısı üzerinden kullanın ( zipvarsayılan olarak sym bağlantıları dereference olacaktır)? İşiniz bittiğinde sadece rmsym bağlantısını yapabilirsiniz. Belki de en zarif çözüm değil, ama zipdoğrudan yapmanın açık bir yolunu bilmiyorum .


1
Bu tar, -hbayrağı kullanırsanız da çalışır .
Kyle Strand

( zBayrağı da kullanıyorum ; bunun etkileyip etkilemediğinden emin değilim.)
Kyle Strand

15

Bu bir cevaptan çok bir tavsiye: Git'i kullanın !

Projeniz için bir Git deposu oluşturursanız, her şey oldukça basit hale gelir:

git archive HEAD --prefix=project-name-version/ \
    --format=zip -o project-name-version.zip

1
Mükemmel tavsiye, teşekkür ederim. git arşiv belgeleri: git-scm.com/docs/git-archive
Meglio

1
Sürüm kontrolü kullanmak iyi bir fikir olsa da, bu cevap genel durum sorusuyla eşleşmiyor.
raimue

@Raim "Bu bir cevaptan daha çok bir tavsiye: Git'i kullanın!" 4 yıldan beri orada yazıyor, işaret ettiğiniz için teşekkür ederim ...
cYrus

1
Bu bir cevap olarak tasarlanmamışsa, bir yoruma dönüştürülmelidir.
15'te raimue

1
@Gregor Bu tür dosyalar aslında projenin bir parçası olduğu için arzu edilen bir davranış olduğunu düşünüyorum, yine de Git özniteliklerini kullanabilirsiniz, örneğin .gitattributesiçeren adında bir dosya oluşturun .git* export-ignore.
cYrus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.