Üst dizini eklemeden bir dosyayı sıkıştırın


12

Birden fazla dosya içeren bir klasörüm var

Klasör

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

Amacım cddir klasörü dahil etmeden bu klasör dışından (yani komut kullanmadan ) dosyayı zip etmektir .

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

Bu komut son zip içindeki dir klasörünü içerir. İpucu var mı?

İlgili soru: Klasörün içeriğini, klasörün kendisini içermeden sıkıştırın


1
Man sayfalarından, sadece -jgeçerli olacak gibi görünüyor ve bu, tüm klasörleri ZIP içindeki tek bir kök düzeyinde dizine sıkıştırır. Aradığın şey bu değil mi?
phyrfox

@phyrfox Belki evet. Doğrulamanız gerekiyor. Teşekkürler.
Lorenzo B

Yanıtlar:


13

Tüm dosyaları folderbir dizin göstergesi olmadan adlarının altında saklamak istiyorsanız , -jseçeneği kullanabilirsiniz .

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

veya

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

Alt dizinlerde dosyalarınız varsa, arşivde de herhangi bir dizin bileşeni folder/subdir/fooolmayacaktır , örneğin arşivde olarak depolanacaktır foo.

Ancak dizine geçmek muhtemelen daha kolay olurdu. Bu hemen hemen brace yöntemi ile yazarak aynı miktarda. Bunu yaparsanız, alt dizinlere dosya eklerseniz, değiştirdiğiniz dizinden göreceli yollarına sahip olurlar, örneğin folder/subdir/fooolarak depolanır subdir/foo.

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

Etkileşimli kullanım için, kabuk tamamlama işlemini bu şekilde kaybedersiniz, çünkü kabuk zipkomutu çalıştırdığınızda farklı bir dizinde olacağınızı fark etmez . Bunu düzeltmek için cdkomutu ayrı olarak verin. Kolayca önceki dizine geri gitmek için, kullanabilir pushdve popd.

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

Bir zip dosyasında depolanan yollar üzerinde tam kontrol istiyorsanız, sembolik bağlantılardan oluşan bir orman oluşturabilirsiniz. Aksi belirtilmedikçe zipsembolik bağlantılar saklamaz.


Alt dizindeki ( folder) tüm dosyaları açıkça listelemeniz gerekmez , sadece bir joker karakter kullanabilirsiniz, yanizip -j folder/*
Jakub Kukul

Kabuk genişletmesine güvenmek, nokta dosyalarının (örneğin .profile) arşive dahil edilmeyeceği anlamına gelir . Bunun yerine, geçerli çalışma dizinini değiştirin ve .arşivlenecek dosya olarak belirtin :cd folder && zip -r ../folder.zip .
sheldonh
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.