Linux'taki zip arşivinden tek bir dosyayı çıkarın


75

Bir zip arşivi var (otomatik olarak -j -rbayraklı bir betikte yaratılır ) ve ondan tek bir dosyayı kaldırmak istiyorum. Belgelendiği gibi denedim.

zip -d "picture_43_9.jpg" gallery.zip

ama bu hatayı alıyorum:

zip warning: picture_43_9.jpg not found or empty   
zip error: Nothing to do! (picture_43_9.jpg)  

Neyse, olan arşiv içinde böyle bir dosya ve boş değildir:

unzip -l .../gallery.zip | grep -i 43_9.jpg  
1477092  2013-05-22 14:23   picture_43_9.jpg 

Neyi yanlış yaptığım hakkında fikrin var mı?

Yanıtlar:


103

Değişkenleri değiştirdiniz. Bunu dene:

zip -d gallery.zip "picture_43_9.jpg" 

Gönderen zip (1) kılavuz sayfasında:

-d
--delete
Bir zip arşivinden girişleri kaldırın (silin). Örneğin:

zip  -d  foo  foo/tom/junk  foo/harry/\*  \*.o

girişi foo/tom/junk, ile başlayan foo/harry/tüm dosyaları ve biten tüm dosyaları .o(herhangi bir yoldan) kaldırır . Böylece, bu kabuk yol adı genişleme ters eğik çizgi ile inhibe edilmiştir Not zip sağlayan yıldız işaretleri görebilirsiniz zip içeriğine uyacak şekilde fermuar yerine geçerli dizinin içeriğinin arşivde. (Ters eğik çizgiler MSDOS tabanlı platformlarda kullanılmaz.) Yıldız işaretlerinden olduğu gibi kaçmak için tırnak işaretleri de kullanabilir

zip -d foo foo/tom/junk "foo/harry/*" "*.o"

Kabuğun joker karakterleri genişlettiği bir sistemde yıldız işaretlerinden kaçmamak, yıldız işaretlerinin geçerli dizindeki dosyaların listesine dönüştürülmesine ve bu listenin arşivden girdileri silmek için kullanılmasına neden olabilir.

MSDOS altında -d , zip arşivindeki adlarla eşleştiğinde büyük / küçük harf duyarlıdır . Bu, eğer bir MSDOS sisteminde PKZIP tarafından sıkıştırılmışlarsa, dosya adlarının büyük harfle girilmesini gerektirir. (Arşiv vaka önemi var bir sistemden geldi ve arşiv hem içerebilir Biz yolları büyük harf duyarsız olan sistemlerde duyarsız Bu durumda yapım kabul ama bu mümkün Barve bar Ama yeni bir seçenek görürsünüz. Arşivde ayrı dosyalar olarak) - ic arşivdeki durumu görmezden gelmek için.


Haklısın, teşekkürler, zip komutunun yardımı ile kafam karıştı zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
Alex Flo

@AlexFlo: Man sayfasının kötü bir kopyası olabilir. Yukarıda belirtilen kopyada “[ zipfile [ file… ]]” yazıyor , bu da (a) hiçbir dosya adı argümanına sahip olamayacağınız anlamına geliyor (bunun ne kadar geçerli olabileceğini bilmeme rağmen, yardım istemek dışında ), (b) yalnızca bir zipfile (arşiv dosyası) adı veya (c) bir veya daha fazla sıradan dosya adı izleyen bir zipfile adı . (Bunlar, arşive eklenecek gerçek dosyaların adları veya manipüle edilecek arşiv üyelerinin adları olabilir.)
Scott

@AlexFlo - Belirtilen kılavuzda zipbelirtildiği gibi dosya adı argümanlarını STDIN ve pipe üzerinden iletebilirsiniz . Eğer içeren bir dizinde iseniz Örneğin file1.txt, file2.txtve file3.txt, sen yürütebileceği ls -1 | zip -q 'files.zip' -@bir arşiv oluşturmak, hangi files.zipsen taşınıyor 3 dosyalarını içeren zipbozulmamış onların dosya adları ile.
rubynorails
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.