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?
İ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 mod7Zip 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.
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.
İ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 ...
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:
Klasörü bulun veya sıkıştırdığınız dosyayı bulun.
run: Zip -9 -r -k Zip- değiştirilmiş- isimleri.Zip/yol/to/your/folder
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.
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.
İş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ı"
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).