วิธีสร้างไฟล์ zip ที่เข้ากันได้กับ Windows ภายใต้ Linux


49

ฉันต้องทำให้ไฟล์ zip พร้อมใช้งานสำหรับผู้เยี่ยมชมผู้ใช้ Windows ของฉันดังนั้นฉันจึงสร้างไฟล์ zip ด้วยคำสั่ง Unix zip (เรียกมันว่า madeinlinux.zip)

มันเปิดขึ้นได้ด้วย WinRar หรือ Winzip แต่ผู้ใช้ของฉันที่ใช้ไฟล์ zip Windows มาตรฐานจัดการกับความล้มเหลวเมื่อพยายามคลายซิป (Windows XP)

ฉันบีบอัดข้อมูลเดียวกันโดยใช้ zip mecanism ในตัวของ Windows และจากมุมมองของ Linux ฉันไม่เห็นความแตกต่างของชนิดของไฟล์:

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

พวกมันจะต้องเป็นไฟล์เฉพาะของไฟล์ zip ที่ใช้งานร่วมกับ Windows ได้

ไม่มีใครรู้อะไรไหม


1
คุณสามารถสร้างหนึ่งในไฟล์ ZIP เหล่านี้ (ที่มีเนื้อหาดัมมี่) และวางไว้บนเซิร์ฟเวอร์เพื่อให้เราดาวน์โหลดและตรวจสอบได้หรือไม่?
Bernhard Hofmann

ดูเหมือนว่าเป็นกรณีสำหรับ superuser.com หากยังมีอยู่

1
เบอร์นาร์ดแน่นอนว่านี่คือผู้กระทำผิด: careerjet.co.uk/devel/Services_Careerjet.zip

เครื่อง windows เดียวที่ฉันต้องทดสอบคือ Windows 7 และไม่มีปัญหาในการเปิดและแตกไฟล์โดยใช้ explorer

ทักทาย windows 7!

คำตอบ:


28

ลองด้วย:

zip -9 -y -r -q file.zip folder/
  • -9 ระบุความเร็วการบีบอัดที่ช้าที่สุด (การบีบอัดที่ดีที่สุดไม่สนใจรายการต่อท้าย)
  • -y จัดเก็บลิงก์สัญลักษณ์เช่นในไฟล์ zip แทนการบีบอัดและจัดเก็บไฟล์ที่อ้างอิงโดยลิงก์
  • -r เดินทางโครงสร้างไดเรกทอรีซ้ำ
  • -q โหมดเงียบ

ทำไมสิ่งนี้จะช่วยในการทำงานร่วมกับ XP ได้
Wowfunhappy

จริงๆแล้วมันเป็นเวลาที่ผ่านมามากจนฉันจำไม่ได้อย่างชัดเจน แต่ฉันสามารถจินตนาการได้ว่าการติดตามลิงก์สัญลักษณ์อาจทำให้เกิดปัญหา (ซึ่งอาจเกิดขึ้นโดยไม่มี-r) และ-rช่วยให้คุณสามารถนำเนื้อหาโฟลเดอร์ทั้งหมดได้
Igor Fobia

11

7zipเป็นเครื่องมือบีบอัดโอเพ่นซอร์สที่ทำงานบน Linux, FreeBSD, Mac OS X, BeOS, DOS, Amiga และ Windows

ฉันอยากจะแนะนำอย่างยิ่งตามเวอร์ชั่นของ windows

มันรองรับ

การบรรจุ / เปิดออก: 7z, ZIP, GZIP, BZIP2 และ TAR

เปิดออกเท่านั้น: ARJ, CAB, CHM, CPIO, DEB, DMG, HFS, ISO, LZH, LZMA, MSI, NSIS, RAR, RPM, UDF, WIM, XAR และ Z


8
ฉันไม่แนะนำให้ใช้เครื่องมือที่เป็นกรรมสิทธิ์ของบุคคลที่สามสำหรับยูทิลิตี้ทั่วไปอย่างไม่น่าเชื่อนี้ (ไฟล์ซิป) ที่มีอยู่ในทุกแพลตฟอร์ม
Rick O'Shea

8

สิ่งนี้มีความเกี่ยวข้องเท่านั้น

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

แต่อ่าน "man zip" บนระบบของคุณก่อนไปที่อื่น ...


1
สวัสดี ขอบคุณสำหรับคำแนะนำ แต่ตัวเลือก -k นี้ทำให้ฉันย้อนเวลากลับไปมากเกินไป มันแปลงชื่อไฟล์ทั้งหมดใน 8 ตัวอักษร / รุ่นกรณีที่ไม่มี :(

ใช่ฉันจำวันเหล่านั้นได้ แต่มันช่วยให้ไฟล์อ่านด้วยโปรแกรม Zip ในตัวบน Windows หรือไม่?

ไม่ทราบ ปัญหาชื่อไฟล์นี้จะหยุดฉันพยายาม

ฉันเดาว่ามันเป็นบีบอัดเป็น MSalters กล่าวว่า ...

8

zip -Zตั้งค่าตัวเลือกการบีบอัด -Z storeเป็นสิ่งที่สำคัญที่สุดเพราะมันไม่บีบอัดเลย สิ่งนี้มีประโยชน์เมื่อคุณใช้zipเป็นทางเลือกtarหรือเมื่อทำการแก้ไขปัญหา ในกรณีนี้คุณควรลองดูว่าไฟล์เก็บถาวรที่ไม่มีการบีบอัดนั้นสามารถใช้งานได้จาก Windows หากที่เป็นที่ใช้งานได้ที่คุณรู้ว่าคุณจะต้องเลือกตัวเลือกการบีบอัดไม่ใช่ค่าเริ่มต้น


น่ากลัวผมคิดว่ามันเป็นวิธีการบีบอัดที่เป็นสาเหตุของปัญหาเกินไป ...

4

นอกจากสิ่งที่คนอื่น ๆ แนะนำแล้วสิ่งสำคัญคือให้ความสนใจกับชื่อไฟล์และไดเรกทอรีของคุณเนื่องจาก Windows ไม่จำเป็นต้องเหมือนกับพา ธ และชื่อไฟล์ Linux บางครั้งมันก็หนีออกมาแตกต่างกันเมื่อซิป ตัวอย่างมีจำนวนมาก แต่ที่สำคัญที่สุดคือจุดไฟล์ (. และ .. ), ไฟล์ที่มีความแตกต่างกรณีเท่านั้น (name.txt และ NAME.txt) เส้นทางแฟ้มสัมบูรณ์ (/tmp/file.txt) อักขระอื่นบางตัวที่อนุญาตให้ใช้ชื่อไฟล์บน Windows อาจทำให้เกิดปัญหาเมื่อใช้ Windows Explorer เพื่อเปิดไฟล์ ในกรณีของฉัน ':' ตัวละครเป็นตัวจัดการข้อตกลง แต่ต้องใช้เวลามากมายในการค้นหาสิ่งนี้

ดังนั้นก่อนที่คุณจะกลับมาใช้งานโดยใช้พารามิเตอร์จำนวนมากฉันขอแนะนำให้ทำตามขั้นตอนง่าย ๆ :

  1. ค้นหาโฟลเดอร์หรือไฟล์ซิปของคุณ

  2. run: zip -9 -r -k zip-modified-names.zip / path / to / your / folder

  3. เอาใจใส่สิ่งที่คอนโซลถ่มน้ำลายออก ในกรณีของฉัน ':' ในชื่อไฟล์ถูกถอดออก
  4. ย้ายไฟล์ zip ไปยังเครื่อง windows และพยายามเปิด

หากวิธีนี้ใช้ได้ผลดีกว่าคุณอาจลบอักขระที่ถูกเอาออกโดยตัวเลือก -k จากชื่อไฟล์ / ไดเรกทอรีของคุณลองใช้ซิปปกติ หมายเหตุพารามิเตอร์บางตัวเช่น -k มีผลข้างเคียง ในกรณีนี้ -k ขัดแย้งกับตัวเลือก -q (สำหรับลิงก์ sym)

ตัวเลือก -k อาจทำให้ชื่อไฟล์ของคุณไม่สามารถอ่านได้ ในกรณีของฉันไฟล์ของฉันถูกตั้งชื่อตามเวลาการสร้าง (เช่น 10: 55: 39.pdf) เพื่ออำนวยความสะดวกในการค้นหาบันทึกที่ต้องการจากไฟล์เก็บถาวรได้อย่างง่ายดาย แต่ตัวเลือก -k เปลี่ยนเป็น 105539.pdf ซึ่งผู้ใช้ไม่สามารถอ่านได้ง่าย ฉันจึงเปลี่ยนชื่อเป็น 10_55_39.pdf ซึ่งเปิดบน Windows โดยไม่ใช้ตัวเลือก -k แต่ยังอ่านได้


1
@ TD.512 คุณสังเกตเห็นว่าคำถามอายุ 6 ปียังไม่มีคำตอบที่ชัดเจน? ดีที่สุดในการเพิ่มคำตอบอื่นถ้าคำตอบดูเหมือนว่าจะช่วยคนอย่างที่คนอื่นไม่ได้
Hi-Angel

3

มีปัญหาที่คล้ายกันเมื่อเร็ว ๆ นี้กับไฟล์ที่ผลิตจากสคริปต์ Perl พบว่า zip windows ดั้งเดิม (ทดสอบเฉพาะ Windows 7 เท่านั้น) จัดการกับพา ธ อย่างไม่ถูกต้องและแสดงไฟล์ zip ที่ว่างเปล่า วิธีแก้ไขคือการตัดเครื่องหมายทับชั้นนำก่อนเพิ่มไฟล์ บางทีคำสั่ง linux zip บางเวอร์ชันอาจเก็บพา ธ ไฟล์ด้วยเครื่องหมายทับ


2
ตามแอพ หมายเหตุเกี่ยวกับไซต์ pkware ( pkware.com/support/zip-app-note/archives ): "ชื่อของไฟล์พร้อมกับพา ธ ที่สัมพันธ์กันที่เป็นทางเลือกพา ธ ที่เก็บไว้ไม่ควรมีตัวอักษรของไดรฟ์หรืออุปกรณ์หรือเครื่องหมายทับ "
EKW

2

นี่คือสคริปต์ python ที่ฉันใช้เพื่อบีบไฟล์บางไฟล์ มันได้รับการทดสอบบน Ubuntu และ Vista ซิปที่สร้างบน Ubuntu จะเปิดขึ้นพร้อมกับ Vista zip

ฉันคิดว่าฉันมีปัญหาที่คล้ายกันในอดีตและเป็นเพราะรูปแบบซิปไม่ใช่ ZIP_DEFLATED ฉันไม่แน่ใจ. ฉันจะตรวจสอบว่า

ฉันหวังว่ามันจะช่วย

นำเข้าไฟล์ zipfile
นำเข้า glob, os, sys

คลาส ZipArchive:

    def zip_it (ตนเอง, dirName, ไฟล์):
        dirNamePrefix = dirName + "/ *"
        สำหรับชื่อไฟล์ใน glob.glob (dirNamePrefix):
            ถ้า os.path.isfile (ชื่อไฟล์) และ (ไม่ใช่ self.exclude_svn หรือ (filename.find (". svn \\") == - 1)):
                ชื่อไฟล์พิมพ์
                name = ชื่อไฟล์ [len (self.folder) +1:]
                self.archive.write (ชื่อไฟล์ชื่อ zipfile.ZIP_DEFLATED)

    def run (ตัวเอง, โฟลเดอร์, ชื่อ, excluse_svn):
        self.exclude_svn =lude_svn
        โฟลเดอร์ self.folder =
        self.archive = zipfile.ZipFile (ชื่อ + ". zip", "w")
        os.path.walk (self.folder, ZipArchive.zip_it, ตนเอง)
        self.archive.close ()

ถ้า __name__ == "__main__":
    if (len (sys.argv) == 1):
        พิมพ์ "โฟลเดอร์ zipit การใช้งาน [ชื่อ] [svn: ใช่ | ไม่]"
    อื่น:
        name = sys.argv [1]
        lude_svn = เท็จ

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

        arch = ZipArchive ()
        arch.run (sys.argv [1], ชื่อ, excluse_svn)
        พิมพ์ "เสร็จแล้ว"


คำถามคือมันสามารถคลายซิปโดยใช้กลไกซิปของ Windows ได้หรือไม่

ใช่. ฉันเปิดมันด้วยเครื่องมือ zip ของ Vista ฉันหวังว่ามันเหมาะกับคุณมากเกินไป

0

อาจมีปัญหาในการถ่ายโอนไฟล์ของคุณจาก Linux เป็น Windows หากคุณกำลังใช้ FTP ลองตั้งค่าการถ่ายโอนแบบไบนารี่ (คำสั่ง bin ใน Windows ก่อนการถ่ายโอนไฟล์ของคุณจาก Linux ไปเป็น Windows)


ไม่เห็นด้วย ฉันพบปัญหาที่คล้ายคลึงกันในฐานะ OP โดยเฉพาะกับ Windows รุ่นเก่า ฉันได้ทำการตรวจสอบความสมบูรณ์และจับคู่ shasum แล้ว นอกจากนี้โปรดทราบว่า OP บอกว่าไฟล์แตกได้อย่างถูกต้องในโปรแกรมของบุคคลที่สาม
Wowfunhappy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.