Cara membuat file zip yang kompatibel dengan Windows di Linux

49

Saya perlu membuat file zip tersedia untuk semua pengunjung pengguna Windows saya, jadi saya secara naif menghasilkan file zip dengan perintah zip Unix (sebut saja madeinlinux.zip).

Ini berhasil dibuka dengan WinRar atau Winzip, tetapi pengguna saya yang menggunakan file zip standar Windows mengalami kegagalan saat mencoba unzip. (Windows XP)

Saya memampatkan data yang sama menggunakan mekanisme zip bawaan Windows, dan dari sudut pandang Linux, saya tidak dapat melihat perbedaan dalam tipe file:

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

Itu pasti sesuatu yang spesifik untuk file zip yang kompatibel dengan Windows.

Adakah yang tahu?

studiohack
sumber
1
Bisakah Anda menghasilkan salah satu file ZIP ini (dengan konten dummy) dan meletakkannya di server untuk kami unduh dan periksa?
Bernhard Hofmann
Ini kedengarannya seperti kasus untuk superuser.com, jika belum ada.
1
Tentu bernhard, inilah pelakunya: careerjet.co.uk/devel/Services_Careerjet.zip
Satu-satunya mesin windows yang harus saya uji adalah Windows 7, dan tidak ada masalah membuka dan mengekstrak file menggunakan explorer.
salam windows 7!

Jawaban:

28

Coba dengan:

zip -9 -y -r -q file.zip folder/
  • -9 Mengindikasikan kecepatan kompresi paling lambat (kompresi optimal, mengabaikan daftar sufiks)
  • -y Simpan tautan simbolis seperti itu di arsip zip, alih-alih mengompresi dan menyimpan file yang dirujuk oleh tautan
  • -r Jelajahi struktur direktori secara rekursif
  • -q Mode diam
Igor Fobia
sumber
Mengapa ini membantu dengan kompatibilitas XP?
Wowfunhappy
Jujur, sudah lama sekali saya tidak ingat dengan jelas; tetapi saya dapat membayangkan bahwa mengikuti tautan simbolik dapat menyebabkan masalah (yang dapat terjadi tanpa -r) dan -rmemungkinkan Anda mengambil semua konten folder
Igor Fobia
11

7zip adalah alat kompresi sumber terbuka yang bekerja di Linux, FreeBSD, Mac OS X, BeOS, DOS, Amiga dan Windows.

Saya akan sangat merekomendasikannya berdasarkan versi windows.

Ini mendukung

packing / membongkar: 7z, ZIP, GZIP, BZIP2 dan TAR

Hanya membongkar: ARJ, CAB, CHM, CPIO, DEB, DMG, HFS, ISO, LZH, LZMA, MSI, NSIS, RAR, RPM, UDF, WIM, XAR, dan Z.

Bruce McLeod
sumber
8
Saya sarankan untuk tidak menggunakan alat berpemilik pihak ke-3 untuk utilitas umum yang luar biasa ini (zip file) yang tersedia sekarang di semua platform.
Rick O'Shea
8

Satu-satunya hal yang terlihat relevan adalah ini

-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.

tapi baca "man zip" di sistem Anda sebelum pergi ke tempat lain ...

Dan Rosenstark
sumber
1
Hai. Terima kasih untuk sarannya, tetapi opsi -k ini membawa saya kembali ke masa agak terlalu banyak. Ini mengubah semua nama file dalam 8 karakter / tidak ada versi kasus :(
Ya, saya ingat hari-hari itu. Tetapi apakah itu membantu file untuk membaca oleh program Zip bawaan pada Windows?
Tidak tahu Masalah nama file ini menghentikan saya mencoba
Dugaan saya adalah bahwa ini adalah kompresi, seperti kata MSalters ...
8

zip -Zmengatur opsi kompresi. -Z storeadalah yang paling sepele, karena tidak kompres sama sekali. Ini berguna saat Anda menggunakan zipsebagai alternatif untuk tar, atau saat pemecahan masalah. Dalam hal ini Anda harus mencoba untuk melihat apakah arsip yang tidak terkompresi dapat digunakan dari Windows. Jika itu adalah digunakan, Anda tahu bahwa Anda harus memilih opsi kompresi non-default.

MSalters
sumber
mengagumkan, aku rasa itu algoritma kompresi yang menyebabkan masalah terlalu ...
4

Selain yang disarankan orang lain, perhatikan juga nama file dan direktori Anda karena Windows tidak selalu menyukai lintasan dan nama file Linux. Kadang-kadang juga lolos secara berbeda ketika zip. Contohnya banyak, tetapi yang paling penting adalah file dot (. Dan ..), file dengan hanya perbedaan huruf (nama.txt dan NAME.txt), jalur file absolut (/tmp/file.txt) . Beberapa karakter lain yang diizinkan dalam nama file di Windows dapat menyebabkan masalah ketika Windows Explorer digunakan untuk membuka file. Dalam kasus saya karakter ':' adalah pemecah kesepakatan tetapi butuh banyak pekerjaan untuk mengetahuinya.

Jadi sebelum Anda melanjutkan menggunakan banyak parameter, saya sarankan ikuti prosedur sederhana:

  1. Temukan folder atau file zip Anda.

  2. jalankan: zip -9 -r -k zip-modified-names.zip / path / ke / folder / Anda

  3. perhatikan konsol yang dimuntahkan. Dalam kasus saya ':' dalam nama file dihapus.
  4. Pindahkan file zip ke mesin windows dan mencoba membukanya.

Jika ini berhasil, Anda mungkin lebih baik menghapus karakter yang telah dihapus oleh opsi -k dari nama file / direktori Anda coba zipping secara normal. Perhatikan beberapa parameter seperti -k memiliki efek samping. Dalam hal ini -k bertentangan dengan opsi -q (untuk tautan sym).

Juga opsi -k dapat membuat nama file Anda tidak dapat dibaca. Dalam kasus saya, file saya dinamai berdasarkan waktu pembuatan (mis. 10: 55: 39.pdf) untuk memudahkan menemukan catatan yang diperlukan dari arsip, tetapi opsi -k mengubahnya menjadi 105539.pdf yang tidak mudah dibaca oleh pengguna. Karenanya saya mengubah nama menjadi 10_55_39.pdf yang terbuka pada Windows tanpa menggunakan opsi -k tetapi masih dapat dibaca.

Shakus
sumber
1
@ TD.512 apakah Anda memperhatikan bahwa pertanyaan 6 tahun masih belum memiliki jawaban yang pasti? Lebih baik menambahkan jawaban lain, jika jawaban itu tampaknya membantu seseorang seperti orang lain tidak.
Hi-Angel
3

Punya masalah serupa baru-baru ini dengan file yang dihasilkan dari skrip perl. Menemukan bahwa zip windows asli (hanya diuji Windows 7) salah menangani jalur dengan garis miring terkemuka dan menampilkan zipfile kosong. Solusi adalah menghapus garis miring sebelum menambahkan file. Mungkin beberapa versi lintasan penyimpanan file zip perintah linux dengan garis miring terkemuka.

Nicholas Hardy
sumber
2
Menurut Aplikasi. Catatan di situs pkware ( pkware.com/support/zip-app-note/archives ): "Nama file, dengan jalur relatif opsional. Jalur yang disimpan tidak boleh berisi drive atau huruf perangkat, atau garis miring terkemuka. "
EKW
2

Berikut ini adalah skrip python yang saya gunakan untuk zip beberapa file. Ini telah diuji di ubuntu dan Vista. Zip yang dihasilkan di Ubuntu terbuka dengan ritsleting Vista.

Saya pikir saya memiliki masalah yang sama di masa lalu dan itu karena format zip tidak ZIP_DEFLATED. Saya tidak yakin. Saya akan periksa itu.

Saya harap ini membantu

impor zipfile
impor glob, os, sys

kelas ZipArchive:

    def zip_it (self, dirName, file):
        dirNamePrefix = dirName + "/ *"
        untuk nama file di glob.glob (dirNamePrefix):
            jika os.path.isfile (nama file) dan (bukan self.exclude_svn atau (filename.find (". svn \\") == - 1)):
                cetak nama file
                name = nama file [len (self.folder) +1:]
                self.archive.write (nama file, nama, zipfile.ZIP_DEFLATED)

    def run (mandiri, folder, nama, exclude_svn):
        self.exclude_svn = exclude_svn
        self.folder = folder
        self.archive = zipfile.ZipFile (nama + ". zip", "w")
        os.path.walk (self.folder, ZipArchive.zip_it, self)
        self.archive.close ()

if __name__ == "__main__":
    if (len (sys.argv) == 1):
        cetak "folder zipit penggunaan [nama] [svn: ya | tidak]"
    lain:
        name = sys.argv [1]
        exclude_svn = Salah

        if (len (sys.argv)> 2): name = sys.argv [2]
        if (len (sys.argv)> 3): exclude_svn = (sys.argv [3] == "no")

        arch = ZipArchive ()
        arch.run (sys.argv [1], nama, exclude_svn)
        cetak "selesai"

luc
sumber
pertanyaannya adalah, apakah bisa dibuka ritsleting menggunakan mekanisme zip Windows?
Iya. Saya sudah membukanya dengan alat zip Vista. Saya harap ini bekerja untuk Anda juga
0

Mungkin ada masalah dalam pemindahan file Anda dari Linux ke Windows. Jika Anda menggunakan FTP, coba tetapkan transfer biner (perintah bin di Windows, sebelum pemindahan file dari Linux ke Windows).

Luis Andrés García
sumber
Tidak setuju. Saya mengalami masalah serupa dengan OP, terutama dengan Windows versi lama. Saya telah melakukan pemeriksaan integritas dan pencocokan shasum. Plus, perhatikan bahwa OP mengatakan file-file tersebut diurai dengan benar di program pihak ke-3.
Wowfunhappy