Cách tạo tệp zip tương thích với Windows trong Linux


49

Tôi cần tạo một tệp zip có sẵn cho tất cả khách truy cập Windows của mình, vì vậy tôi đã ngây thơ tạo ra một tệp zip bằng lệnh zip Unix (hãy gọi nó là madeinlinux.zip).

Nó mở thành công với WinRar hoặc Winzip, nhưng những người dùng của tôi đang sử dụng trải nghiệm xử lý tệp zip tiêu chuẩn của Windows thất bại khi cố gắng giải nén nó. (Windows XP)

Tôi đã nén cùng một dữ liệu bằng cách sử dụng mecanism zip tích hợp của Windows và theo quan điểm của Linux, tôi không thể thấy bất kỳ sự khác biệt nào trong loại tệp:

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

Chúng phải là một cái gì đó cụ thể cho một tệp zip tương thích với Windows.

Có ai biết cái gì không?


1
Bạn có thể tạo một trong những tệp ZIP này (có nội dung giả) và đặt nó lên máy chủ để chúng tôi tải xuống và kiểm tra không?
Bernhard Hofmann

Điều này nghe có vẻ như là một trường hợp cho superuser.com, nếu nó tồn tại.

1
Chắc chắn bernhard, đây là thủ phạm: Careerjet.co.uk/devel/Service_Careerjet.zip

Máy Windows duy nhất tôi phải kiểm tra là Windows 7 và không có vấn đề gì khi mở và giải nén tệp bằng explorer.

mưa đá cửa sổ 7!

Câu trả lời:


28

Hãy thử với:

zip -9 -y -r -q file.zip folder/
  • -9 Cho biết tốc độ nén chậm nhất (nén tối ưu, bỏ qua danh sách hậu tố)
  • -y Lưu trữ các liên kết tượng trưng như vậy trong kho lưu trữ zip, thay vì nén và lưu trữ tệp được liên kết tham chiếu
  • -r Du lịch cấu trúc thư mục đệ quy
  • -q Chế độ yên lặng

Tại sao điều này sẽ giúp với khả năng tương thích XP?
Wowfunhappy

Thành thật mà nói, nó đã rất nhiều thời gian trước đây mà tôi không nhớ rõ; nhưng tôi có thể tưởng tượng rằng việc theo các liên kết tượng trưng có thể dẫn đến các vấn đề (điều đó có thể xảy ra mà không có -r) và -rcho phép bạn lấy tất cả nội dung thư mục
Igor Fobia

11

7zip là một công cụ nén mã nguồn mở hoạt động trên Linux, FreeBSD, Mac OS X, BeOS, DOS, Amiga và Windows.

Tôi rất muốn giới thiệu nó dựa trên phiên bản windows.

Nó hỗ trợ

đóng gói / giải nén: 7z, ZIP, GZIP, BZIP2 và TAR

Chỉ giải nén: ARJ, CAB, CHM, CPIO, DEB, DMG, HFS, ISO, LZH, LZMA, MSI, NSIS, RAR, RPM, UDF, WIM, XAR và Z.


8
Tôi khuyên bạn không nên sử dụng một công cụ độc quyền của bên thứ 3 khác cho tiện ích phổ biến không thể tin được này (zip một tệp) hiện có sẵn trên tất cả các nền tảng.
Rick O'Shea

8

Điều duy nhất có vẻ phù hợp là

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

nhưng hãy đọc "man zip" trên hệ thống của bạn trước khi đi bất cứ nơi nào khác ...


1
Chào. Thx cho đề xuất, nhưng tùy chọn -k này đưa tôi trở lại thời gian một chút quá nhiều. Nó biến đổi tất cả tên tệp trong 8 ký tự / không có phiên bản trường hợp :(

Vâng, tôi nhớ những ngày đó. Nhưng nó có giúp tập tin đọc được bằng chương trình Zip tích hợp trên Windows không?

Đừng biết nữa. Vấn đề tên tập tin này đã ngăn tôi thử

Tôi đoán là đó là sự nén, như MSalters nói ...

8

zip -Zđặt tùy chọn nén. -Z storelà một trong những tầm thường nhất, vì nó hoàn toàn không nén. Điều này hữu ích khi bạn đang sử dụng zipthay thế tarhoặc khi khắc phục sự cố. Trong trường hợp này, bạn nên thử xem liệu một kho lưu trữ không nén có thể sử dụng được từ Windows hay không. Nếu đó có thể sử dụng, bạn biết rằng bạn sẽ phải chọn một tùy chọn nén không mặc định.


thật tuyệt, tôi đoán đó là thuật toán nén cũng gây rắc rối ...

4

Ngoài những gì người khác đề xuất, điều quan trọng là phải chú ý đến tên tệp và thư mục của bạn vì Windows không nhất thiết phải giống như tên và đường dẫn tệp Linux. Nó đôi khi cũng thoát chúng khác nhau khi nén. Ví dụ có rất nhiều, nhưng quan trọng nhất là các tệp chấm (. Và ..), các tệp chỉ có trường hợp khác nhau (name.txt và NAME.txt), đường dẫn tệp tuyệt đối (/tmp/file.txt) . Một số ký tự khác được cho phép trong tên tệp trên Windows có thể gây ra sự cố khi Windows Explorer được sử dụng để mở tệp. Trong trường hợp của tôi ':' nhân vật là người phá vỡ thỏa thuận nhưng mất rất nhiều công sức để tìm ra điều này.

Vì vậy, trước khi bạn tiếp tục sử dụng nhiều tham số, tôi khuyên bạn nên làm theo một quy trình đơn giản:

  1. Xác định vị trí thư mục hoặc tập tin nén của bạn lên.

  2. chạy: zip -9 -r -k zip-modified-names.zip / path / to / your / thư mục

  3. chú ý đến những gì giao diện điều khiển phun ra. Trong trường hợp của tôi ':' trong tên tệp đã bị loại bỏ.
  4. Di chuyển tệp zip vào máy windows và cố gắng mở nó.

Nếu điều này hoạt động, bạn có thể tốt hơn nên loại bỏ các ký tự đã bị loại bỏ bởi tùy chọn -k khỏi tên tệp / thư mục của bạn hãy thử nén bình thường. Lưu ý một số thông số như -k có tác dụng phụ. Trong trường hợp này -k mâu thuẫn với tùy chọn -q (đối với liên kết sym).

Ngoài ra tùy chọn -k có thể khiến tên tệp của bạn không thể đọc được. Trong trường hợp của tôi, các tệp của tôi được đặt tên dựa trên thời gian tạo (ví dụ 10: 55: 39.pdf) để dễ dàng xác định vị trí bản ghi cần thiết từ kho lưu trữ, nhưng tùy chọn -k đã chuyển thành 105539.pdf mà người dùng không dễ đọc. Do đó, tôi đã thay đổi tên thành 10_55_39.pdf mở trên Windows mà không sử dụng tùy chọn -k nhưng vẫn có thể đọc được.


1
@ TD.512 bạn có nhận thấy rằng câu hỏi 6 tuổi vẫn không có câu trả lời chắc chắn không? Tốt nhất là thêm một câu trả lời khác, nếu câu trả lời dường như giúp được ai đó như những người khác thì không.
Hi-Angel

3

Gần đây có một vấn đề tương tự với các tệp được tạo từ tập lệnh perl. Tìm thấy rằng zip cửa sổ gốc (chỉ Windows 7 được kiểm tra) xử lý không chính xác các đường dẫn bằng dấu gạch chéo hàng đầu và hiển thị một tệp zip trống. Giải pháp là loại bỏ dấu gạch chéo hàng đầu trước khi thêm tệp. Có lẽ một số phiên bản của đường dẫn tệp linux lưu trữ đường dẫn tệp với dấu gạch chéo hàng đầu.


2
Theo Ứng dụng. Ghi chú trên trang web pkware ( pkware.com/support/zip-app-note/archives ): "Tên của tệp, với đường dẫn tương đối tùy chọn. Đường dẫn được lưu trữ không được chứa ký tự ổ đĩa hoặc thiết bị hoặc dấu gạch chéo hàng đầu. "
EKW

2

Đây là một kịch bản python mà tôi đang sử dụng để nén một số tập tin. Nó đã được thử nghiệm trên Ubuntu và Vista. Một zip được tạo trên Ubuntu mở bằng khóa kéo Vista.

Tôi nghĩ rằng tôi đã có một vấn đề tương tự trong quá khứ và đó là do định dạng zip không phải là ZIP_DEFLATED. Tôi không chắc. Tôi sẽ kiểm tra xem.

Tôi hy vọng nó sẽ giúp

nhập khẩu zipfile
nhập khẩu toàn cầu, os, sys

lớp ZipArchive:

    def zip_it (tự, dirName, tệp):
        dirNamePrefix = dirName + "/ *"
        cho tên tệp trong global.glob (dirNamePrefix):
            if os.path.isfile (tên tệp) và (không phải self.exclude_svn hoặc (filename.find (". svn \\") == - 1)):
                in tên tập tin
                tên = tên tệp [len (self.folder) +1:]
                self.archive.write (tên tệp, tên, zipfile.ZIP_DEFLATED)

    def run (tự, thư mục, tên, loại trừ_svn):
        self.exclude_svn = Elim_svn
        self.folder = thư mục
        self.archive = zipfile.ZipFile (tên + ". zip", "w")
        os.path.walk (self.folder, ZipArchive.zip_it, tự)
        self.archive.c Đóng ()

if __name__ == "__main__":
    if (len (sys.argv) == 1):
        in "thư mục sử dụng zipit [tên] [svn: yes | no]"
    khác:
        tên = sys.argv [1]
        loại trừ_svn = Sai

        if (len (sys.argv)> 2): name = sys.argv [2]
        if (len (sys.argv)> 3): loại trừ_svn = (sys.argv [3] == "không")

        vòm = ZipArchive ()
        arch.run (sys.argv [1], tên, loại trừ_svn)
        in "xong"


Câu hỏi là, nó có thể được giải nén bằng cơ chế zip của Windows không?

Đúng. Tôi đã mở nó bằng công cụ zip Vista. Tôi hy vọng nó cũng hiệu quả với bạn

0

Có thể có một vấn đề trong việc chuyển tập tin của bạn từ Linux sang Windows. Nếu bạn sử dụng FTP, hãy thử thiết lập chuyển nhị phân (lệnh bin trong Windows, trước khi chuyển các tệp của bạn từ Linux sang Windows).


Không đồng ý. Tôi đã gặp vấn đề tương tự như OP, đặc biệt là với các phiên bản Windows cũ. Tôi đã thực hiện kiểm tra tính toàn vẹn và trận đấu của shasum. Thêm vào đó, lưu ý rằng OP cho biết các tệp giải nén đúng cách trong các chương trình của bên thứ 3.
Wowfunhappy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.