it-swarm.asia

Linux altında Windows ile uyumlu bir Zip dosyası nasıl oluşturulur

Bir Zip dosyasını tüm Windows kullanıcıları ziyaretçilerimin kullanımına sunmam gerekiyor, bu yüzden naif bir şekilde Unix Zip komutunu içeren bir Zip dosyası hazırladım (hadi bunu madeinlinux.Zip olarak çağıralım).

WinRar veya Winzip ile başarılı bir şekilde açılıyor, ancak standart Windows Zip dosyası işlemesini kullanan kullanıcılarım, sıkıştırmayı açmaya çalışırken başarısız oluyor. (Windows XP)

Windows yerleşik Zip mekanizması kullanarak aynı verileri sıkıştırdım ve Linux açısından, dosya türünde herhangi bir fark göremiyorum:

$ file madeinlinux.Zip :  Zip archive data, at least v2.0 to extract
$ file madeinwindows.Zip : Zip archive data, at least v2.0 to extract

Windows uyumlu bir Zip dosyasına özel bir şey olmalılar.

Kimse ne biliyor mu?

47
user3213

İle deneyin:

Zip -9 -y -r -q file.Zip folder/
  • -9 En yavaş sıkıştırma hızını belirtir (en uygun sıkıştırma, sonek listesini yok sayar)
  • -y Bağlantı tarafından belirtilen dosyayı sıkıştırmak ve saklamak yerine, Zip arşivinde olduğu gibi sembolik bağlar saklayın.
  • -r Dizin yapısını tekrarlı bir şekilde gezin
  • -q Sessiz mod
26
Igor Fobia

7Zip Linux, FreeBSD, Mac OS X, BeOS, DOS, Amiga ve Windows üzerinde çalışan açık kaynaklı bir sıkıştırma aracıdır.

Windows sürümüne göre tavsiye ederim.

Destekler

paketleme/açma: 7z, Zip, GZIP, BZIP2 ve TAR

Sadece ambalajın açılması: ARJ, CAB, CHM, CPIO, DEB, DMG, HFS, ISO, LZH, LZMA, MSI, NSIS, RAR, RPM, UDF, WIM, XAR ve Z.

11
Bruce McLeod

Zip -Z sıkıştırma seçeneğini ayarlar. -Z store, hiç sıkışmadığı için en önemsiz olanıdır. Bu, Zip seçeneğine alternatif olarak tar kullanıyorsanız veya sorun giderirken kullanışlıdır. Bu durumda sıkıştırılmamış bir arşivin Windows'tan kullanılıp kullanılamayacağını görmeye çalışmalısınız. Eğer is kullanılabilirse, varsayılan olmayan bir sıkıştırma seçeneği seçmeniz gerektiğini biliyorsunuz.

8
MSalters

İlgili görünen tek şey bu

-k - Attempt  to  convert  the  names  and paths to conform to MSDOS, store only the MSDOS attribute (just the user write attribute from UNIX), and mark the entry as made under
MSDOS (even though it was not); for compatibility with PKUNZIP under MSDOS which cannot handle certain names such as those with two dots.

ama başka bir yere gitmeden önce sisteminizde "man Zip" yazısını okuyun ...

7
Dan Rosenstark

Diğerlerinin önerdiğine ek olarak, bu önemlidir, çünkü dosya ve dizin adlarına dikkat edin, Windows mutlaka Linux dosya yolunu ve adlarını sevmez. Sıkıştırma sırasında bazen onlardan farklı şekilde kaçar. Örnekler çoktur, ancak en önemlisi nokta dosyaları (. Ve ..), yalnızca büyük/küçük harf farkına sahip dosyalar (name.txt ve NAME.txt), mutlak dosya yolları (/tmp/file.txt) . Windows'ta dosya adlarında izin verilen bazı diğer karakterler, Windows Gezgini'nin dosyaları açmak için kullanıldığında sorunlara neden olabilir. Benim durumumda ':' karakteri anlaşma kırıcıydı, ancak bunu bulmak için çok çalıştım.

Bu yüzden çok fazla parametre kullanmaya devam etmeden önce basit bir prosedür izlemenizi öneririm:

  1. Klasörü bulun veya sıkıştırdığınız dosyayı bulun.

  2. run: Zip -9 -r -k Zip- değiştirilmiş- isimleri.Zip/yol/to/your/folder

  3. konsolun dışarıya sıçramasına dikkat edin. Benim durumumda ':' dosya isimlerinden çıkarıldı.
  4. Zip dosyasını bir windows makinesine taşıyın ve açmayı deneyin.

Bu işe yararsa, -k seçeneğiyle çıkardığınız karakterleri dosya/dizin adlarınızdan silmek daha iyi olabilir; normalde sıkıştırmayı deneyin. -k gibi bazı parametrelerin yan etkileri olduğuna dikkat edin. Bu durumda -k, -q seçeneğiyle (sym bağlantıları için) çelişir.

Ayrıca -k seçeneği dosya adlarınızı okunamaz hale getirebilir. Benim durumumdaki dosyalar, gerekli kaydı arşivlerden kolayca bulmayı kolaylaştırmak için yaratma zamanına (örneğin, 10: 55: 39.pdf) dayanıyordu, ancak -k seçeneği kullanıcılar tarafından kolayca okunamayan 105539.pdf'ye çevirdi. Bu nedenle isimleri, Windows'ta -k seçeneğini kullanmadan açan ancak yine de okunabilen 10_55_39.pdf olarak değiştirdim.

4
Shakus

Son zamanlarda Perl betiğinden üretilen dosyalarda da benzer bir sorun vardı. Yerel pencerelerin Zip'in (yalnızca Windows 7'de test edildiğini) hatalı bir şekilde eğik çizgi içeren yolları işlediğini ve boş bir zip dosyası görüntülediğini tespit etti. Çözüm, dosya eklemeden önce baştaki kıskacı soymaktı. Belki linux Zip komutunun bazı sürümleri, eğik çizgileri olan dosya yollarını saklar.

3
Nicholas Hardy

İşte bazı dosyaları zip için kullanıyorum bir python betiği. Ubuntu ve Vista'da test edilmiştir. Ubuntu'da oluşturulan bir Zip, Vista fermuarıyla açılır.

Geçmişte benzer bir sorun yaşadığımı düşünüyorum ve bunun nedeni Zip formatının Zip_DEFLATED olmadığıydı. Emin değilim. Bunu kontrol edeceğim.

Umut ediyorum bu yardım eder

 alma zipfile 
 import glob, os, sys 
 
 sınıf ZipArchive: 
 
 def Zip_it (self, dirName, files) : 
 dirNamePrefix = dirName + "/ *" 
] glob.glob içindeki dosya adı için (dirNamePrefix): 
 eğer os.path.isfile (dosyaadı) ve (özçekim. dosyaadı.find (". svn \\") == - 1)): 
 baskı dosya adı 
 name = dosyaadı [len (self.folder) +1:] 
 öz .archive.write (dosya adı, ad, zipfile.Zip_DEFLATED) 
 
 def run (öz, klasör, ad, exclude_svn): 
 self.exclude_svn = exclude_svn 
 self.folder = klasör 
 self.archive = zipfile.ZipFile (name + ". Zip", "w") 
 os.path.walk (self.folder, ZipArchive.Zip_it, self) 
 self.archive.close () 
 
 eğer __== "__main __": 
 eğer (len (sys.argv) == 1): 
 "kullanım zipit klasörü [name] [svn: yes | no]" 
 baska baska baska: 
 name = sys.argv [1] 
 exc_s_sn = False 
 
 eğer (len (sys.argv)> 2): name = sys.argv [2] 
 eğer (len (sys.argv)> 3): exclude_svn = (sys.argv [3] == "hayır") 
 
 Arch = ZipArchive () 
 Arch. run (sys.argv [1], isim, exclude_svn) 
 baskı "tamamlandı" 
 
1
luc

Muhtemelen Linux'tan Windows'a dosya aktarımında bir sorun vardır. FTP kullanıyorsanız, ikili aktarım ayarlamayı deneyin (Windows'ta dosyalarınızı Linux'tan Windows'a aktarmadan önce bin komutu).

0