Bu en temel soruyu affedin, ancak yığın değişiminde doğrudan bir cevap veya basit bir örnek bulamadım.
Diyelim ki, korkunç Windows arkadaşlarımla paylaşabileceğim bir zip dosyasına sıkıştırmak istediğim bir dosya klasörünüz var (aksi takdirde sadece kullanmak tar
ve onunla yapmak istiyorum ). Şöyle görünüyor:
.
├── file1.txt
├── file2.txt
├── file3.txt
├── file.jpg
└── test.jpg
zip
Yüklediğimi varsayarak :
sudo apt-get install zip
man zip
Bir dosya listesi kullanmama izin verdiğini görüyorum :
- @ dosya listeleri. Bir dosya listesi - @ [MacOS'ta değil] olarak belirtilirse zip, giriş dosyalarının listesini komut satırından ziyade standart girişten alır. Örneğin,
zip -@ foo
Ben zip.lst
de şöyle bir şey yarattım :
cat zip.lst
file1.txt
file2.txt
file3.txt
file.jpg
test.jpg
Ve şimdi denedim:
zip -@ zip.lst
Ancak konsolda boş bir satır oluşturmak dışında hiçbir şey yapmadı. Ve itmeye devam edebilirim Enterve görünüşe göre komutu yerine getirmeden daha fazla boş satır yapmaya devam ediyor. Biraz arama yaptıktan sonra, Ctrl+ tuşlarına basarak girişi sonlandırmam gerektiğini fark ettim.D
Ama şimdi bu hatayı alıyorum:
zip warning: missing end signature--probably not a zip file (did you
zip warning: remember to use binary mode when you transferred it?)
zip warning: (if you are trying to read a damaged archive try -F)
zip error: Zip file structure invalid (zip.lst)
Ne!? Basit listem nasıl "geçerli bir dosya yapısı" değil? Daha fazla bilgi için kılavuza geri döndüğümde daha yakından inceleyeceğim:
Eğer bir dosya listesi olarak belirtilir - @ ...
Bu yüzden onsuz deniyorum -@
ve bu en azından Ctrl+ tuşuna basmadan hemen işliyor Dama aynı hatayla kaldım .
Neyse ki buldum bir yorum açıkça zip dosyasını adlandırmak için gerekli olduğunu fark götürdü neredeyse ilgisiz soruya bir cevap üzerinde. Bu hata varsayılan olarak adlı bir zip dosyası oluşturmaya çalıştığı için olur zip.lst
. Ancak bu listemin adı olduğundan, listenin üzerine yazılacağını düşünebiliriz, ama hayır, aslında güncellemeye çalışıyordu. Ve liste açık bir şekilde zip dosyası olmadığından, geçersiz dosya yapısı hatası alıyoruz ve şimdi neden "muhtemelen bir zip dosyası değil" dediğini açıklıyor. Sonra denedim:
zip files.zip zip.lst
adding: zip.lst (deflated 35%)
Eureka! Zip dosyasının oluşturulduğunu ve klasörümün şimdi içerdiğini görebiliyorum:
.
├── file1.txt
├── file2.txt
├── file3.txt
├── file.jpg
├── files.zip
├── test.jpg
└── zip.lst
Ancak kutlamadan önce bekleyin, önce zip dosyasının içeriğini onaylayalım:
unzip -l files.zip
Archive: files.zip
Length Date Time Name
--------- ---------- ----- ----
48 2016-05-24 15:30 zip.lst
--------- -------
48 1 file
Hayır! Aslında, standart kullanımdan mantıklı çünkü verdiğim bir liste dosyasını sıkıştırdı. Sonunda tekrar denedim -@
ama aynı sonucu aldım.
Neyi yanlış yapıyorum?
BTW, GUI'yi kullanabileceğimi ve faremle yapabileceğimi biliyorum, ama bunu senaryolamam gerekiyor ve genel olarak ne yaptığımı bildiğimde CLI'de daha hızlıyım.
ls
vegrep
ve posta 's-@
, zip komut satırı ör doğrudan dosyaları seçmek için kabuk globs kullanabilirzip files.zip file*
veyazip images.zip *.jpg
. Ayrıca, bir dosyadan dosya adları listesi kullanırken, ayrı bir kedi işlemi çağırmak yerine yeniden yönlendirme kullanabilirsiniz,zip files.zip -@ < zip.lst