أحتاج إلى جعل ملف Zip متاحًا لجميع زوار Windows ، لذا أنتجت بسذاجة ملف Zip باستخدام أمر Unix Zip (دعنا نسميها madeinlinux.Zip).
يتم فتحه بنجاح باستخدام WinRar أو Winzip ، ولكن فشل المستخدمون الذين يستخدمون تجربة التعامل مع ملفات Windows Zip القياسية عند محاولة فك الضغط. (ويندوز إكس بي)
قمت بضغط نفس البيانات باستخدام تقنية Zip Zip المضمنة في نظام 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
يجب أن تكون شيئًا خاصًا بملف مضغوط متوافق مع Windows.
لا أحد يعرف ماذا؟
محاولة مع:
Zip -9 -y -r -q file.Zip folder/
-9
يشير إلى أبطأ سرعة ضغط (الضغط الأمثل ، يتجاهل قائمة اللاحقة)-y
تخزين الروابط الرمزية على هذا النحو في أرشيف Zip ، بدلاً من ضغط وتخزين الملف المشار إليه بواسطة الرابط-r
السفر هيكل الدليل بشكل متكرر-q
الوضع الهادئ7Zip هي أداة ضغط مفتوحة المصدر تعمل على أنظمة Linux و FreeBSD و Mac OS X و BeOS و DOS و Amiga و Windows.
سأكون في غاية يوصي به على أساس نسخة ويندوز.
انه يدعم
التعبئة/التفريغ: 7z ، Zip ، GZIP ، BZIP2 و TAR
التفريغ فقط: ARJ و CAB و CHM و CPIO و DEB و DMG و HFS و ISO و LZH و LZMA و MSI و NSIS و RAR و RPM و UDF و WIM و XAR و Z.
Zip -Z
يضبط خيار الضغط. -Z store
هو الأكثر تافها ، لأنه لا يضغط على الإطلاق. يكون هذا مفيدًا عند استخدام Zip
كبديل لـ tar
، أو عند استكشاف الأخطاء وإصلاحها. في هذه الحالة ، يجب أن تحاول معرفة ما إذا كان أرشيف غير مضغوط قابل للاستخدام من Windows. إذا كان هذا قابلاً للاستخدام ، فأنت تعلم أنه سيتعين عليك اختيار خيار ضغط غير افتراضي.
الشيء الوحيد الذي يبدو ذات صلة هو هذا
-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" على نظامك قبل الذهاب إلى أي مكان آخر ...
بالإضافة إلى ما اقترحه الآخرون ، من المهم الانتباه إلى أسماء الملفات والدليل الخاصة بك لأن Windows لا يحب بالضرورة مسار ملف Linux والأسماء. في بعض الأحيان أيضا يهرب منهم بشكل مختلف عند الضغط. الأمثلة عديدة ، ولكن الأهم ملفات نقطة (. و ..) ، ملفات ذات اختلافات حالة فقط (name.txt و NAME.txt) ، مسارات الملفات المطلقة (/tmp/file.txt) . قد تتسبب بعض الأحرف الأخرى المسموح بها في أسماء الملفات على Windows في حدوث مشكلات عند استخدام مستكشف Windows لفتح الملفات. في حالتي ':' كانت الشخصية هي الفاصل في الصفقة ولكنها بذلت الكثير من العمل لاكتشاف ذلك.
لذلك قبل أن تستأنف استخدامك للعديد من المعلمات ، أقترح اتباع إجراء بسيط:
حدد موقع المجلد أو قم بتنسيق ملف zip الخاص بك.
المدى: الرمز البريدي -9 - ص - ك الرمز البريدي - المعدل - الرمز البريدي/المسار/إلى/مجلدك
إذا نجح هذا الأمر ، فقد يكون من الأفضل لك إزالة الأحرف التي تم تجريدها من الخيار -k من أسماء الملفات/الدلائل ، فجرّب استخدام zipping بشكل طبيعي. لاحظ أن بعض المعلمات مثل -k لها آثار جانبية. في هذه الحالة ، يتناقض مع k مع خيار -q (للروابط sym).
أيضا -k الخيار قد يجعل أسماء الملفات الخاصة بك غير قابلة للقراءة. في حالتي ، تم تسمية ملفاتي على أساس وقت الإنشاء (على سبيل المثال 10: 55: 39.pdf) لتسهيل تحديد موقع السجل المطلوب بسهولة من الأرشيف ، ولكن خيار -k حوله إلى 105539.pdf والذي لا يمكن للمستخدمين قراءته بسهولة. لقد غيرت الأسماء إلى 10_55_39.pdf التي تفتح على نظام التشغيل Windows دون استخدام الخيار -k ولكن لا تزال قابلة للقراءة.
كان لديه مشكلة مماثلة في الآونة الأخيرة مع الملفات المنتجة من البرنامج النصي بيرل. وجدت أن windows الأصلي Zip (تم اختباره في Windows 7 فقط) بشكل غير صحيح يعالج المسارات بشرطة مائلة أولية ويعرض ملف zipfile فارغًا. كان الحل هو تجريد الشرطة المائلة قبل إضافة الملفات. ربما بعض إصدارات مسارات ملف أوامر linux Zip مع خطوط مائلة بادئة.
إليك برنامج نصي بيثون أستخدمه لضغط بعض الملفات. وقد تم اختباره على أوبونتو وفيستا. الرمز البريدي الذي تم إنشاؤه على أوبونتو يفتح مع ويندوز فيستا سحاب.
أعتقد أن لدي مشكلة مماثلة في الماضي وكان ذلك بسبب أن تنسيق Zip لم يكن Zip_DEFLATED. أنا غير متاكد. سوف تحقق ذلك.
اتمني ان يكون مفيدا
import zipfile import glob، os، sys class ZipArchive: def Zip_it (self، dirName، files) : dirNamePrefix = dirName + "/ *" لاسم الملف في glob.glob (dirNamePrefix): إذا كان os.path.isfile (اسم الملف) و (ليس self.exclude_svn أو ( filename.find (". svn \\") == - 1)): اسم ملف الطباعة name = اسم الملف [len (self.folder) +1:] .archive.write (اسم الملف ، الاسم ، zipfile.Zip_DEFLATED) def def (self، folder، name، exclude_svn): self.exclude_svn = exclude_svn self.folder = folder self.archive = zipfile.ZipFile (name + ". Zip"، "w") os.path.walk (self.folder، ZipArchive.Zip_it، self) self.archive.close () إذا __== "__main __": إذا (len (sys.argv) == 1): طباعة "use zipit folder [name] [svn: yes | no]" آخر: name = sys.argv [1] exclude_svn = False إذا (len (sys.argv)> 2): name = sys.argv [2] if (len (sys.argv)> 3): exclude_svn = (sys.argv [3] == "no") Arch = ZipArchive () Arch. تشغيل (sys.argv [1] ، الاسم ، exclude_svn) طباعة "تم" [....]
من المحتمل أن تكون هناك مشكلة في نقل الملفات من Linux إلى Windows. إذا كنت تستخدم FTP ، فحاول تعيين نقل ثنائي (أمر bin في Windows ، قبل نقل ملفاتك من Linux إلى Windows).