Unzip දෝෂය නිවැරදි කරන්නේ කෙසේද "End-of-central-directory අත්සන සොයාගත නොහැක"


ප්රශ්නය: මම කොහෙන් හරි zip file එකක් බාගත්තා. මම unzip විධානය භාවිතයෙන් zip ගොනුවෙන් සම්පීඩිත ගොනු උපුටා ගැනීමට උත්සාහ කරන විට, මට එය unzip කිරීමට නොහැකි වන අතර ඒ වෙනුවට පහත දෝෂය ලැබේ.


End-of-central-directory signature not found.  Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive.  In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.

මෙම unzip දෝෂය නිවැරදි කරන්නේ කෙසේද?

ඔබට zip ගොනුවකින් ගොනු උකහා ගැනීමට නොහැකි නම් සහ ඒ වෙනුවට "End-of-central-directory signature not found" දෝෂය ලබා ගන්නේ නම්, ඔබට කළ හැකි දේ මෙන්න.

ප්රධාන වශයෙන්, gzip වැනි වෙනත් සමාන සංරක්ෂිත වැඩසටහන් මගින් ජනනය නොකළ සංරක්ෂිතය සැබවින්ම zip ගොනුවක් දැයි පරීක්ෂා කිරීමට ඔබට අවශ්ය වේ. එබැවින් මෙම හැකියාව ඉවත් කිරීම සඳහා gunzip සමඟ එය සම්පීඩනය කිරීමට උත්සාහ කරන්න.

මෙය උදව් නොකරන්නේ නම්, වෙනස්කම් වන්නේ zip ගොනුව අසම්පූර්ණව බාගත කර තිබීම හෝ කෙසේ හෝ ඔබගේ තැටියේ දූෂිත වී තිබීමයි. ඉතිරි නිබන්ධනය තුළ, අපි සොයා බලමුZip ගොනුවක් දූෂිත වූ විට හෝ ගොනුවේ අවසානය කප්පාදු වූ විට unzip දෝෂය නිවැරදි කරන්නේ කෙසේද, හෝ අඩුම තරමින් වට කර ගන්නේ කෙසේද.

Zip සංරක්ෂිතයක ගොනු ගබඩා කර ඇති ආකාරය

ගැටලුව වඩාත් හොඳින් අවබෝධ කර ගැනීමට කැමති ඔබ සඳහා, zip සංරක්ෂිතයක ගොනු ගබඩා කර ඇති ආකාරය පිළිබඳ කෙටි දළ විශ්ලේෂණයක් මෙන්න.

සැලසුම් කිරීම මගින් zip සංරක්ෂිත ගොනුවක් එහි බහු ගොනු ගබඩා කර (සහ විකල්ප වශයෙන් සම්පීඩනය කළ හැක). zip සංරක්ෂිතයේ අවසානයේ "මධ්යම ඩිරෙක්ටරිය" ලෙස හැඳින්වෙන විශේෂ නාමාවලියක් අඩංගු වේ, එය zip ගොනුවේ ඇති ගොනු මොනවාදැයි හඳුනා ගනී. ලේඛනාගාරයක් අවසානයේ මධ්යම නාමාවලිය ඇතුළත් කිරීමට ප්රධාන හේතුව වන්නේ ලේඛනාගාරය පහසුවෙන් යාවත්කාලීන කළ හැකි වීමයි. උදාහරණයක් ලෙස, (විශාල) zip ගොනුවක් නව ගොනුවක් එකතු කිරීමෙන් සහ පවතින ගොනුවක් මකා දැමීමෙන් යාවත්කාලීන කරන විට, මෙම යාවත්කාලීනයන් සම්පූර්ණ zip ගොනුව පරිලෝකනය නොකර මධ්යම නාමාවලි තොරතුරු සමඟ පහසුවෙන් යෙදිය හැක.

zip සංරක්ෂිතයක ඇති සෑම ගොනුවක්ම එහි "දේශීය ගොනු ශීර්ෂකය" සමඟ සම්බන්ධ වී ඇති අතර එහි ගොනු ප්රමාණය, ගොනු නාමය යනාදී ගොනුව පිළිබඳ අවශ්ය පාර-දත්ත අඩංගු වේ.

unzip විධානය විශේෂිත අත්සනක් සහිත "මධ්යම ඩිරෙක්ටරි වාර්තාවේ අවසානය" සෙවීමෙන් zip ගොනුවක අඛණ්ඩතාව තහවුරු කරයි, සහ අත්සන නොමැතිව ගොනු උපුටා ගැනීම ප්රතික්ෂේප කරයි.

පළමු ක්රමය: jar

දූෂිත zip ගොනුවක් උපුටා ගැනීම සඳහා එක් විකල්පයක් වන්නේ ජාවා සංවර්ධන කට්ටලය (JDK) සමඟ එන jar විධානය භාවිතා කිරීමයි. මුලින් jar විධානය ජාවා-විශේෂිත පන්ති ගොනු සහ පාර-දත්ත සඳහා සංරක්ෂිතයක් නිර්මාණය කර උපුටා ගනී, නමුත් JAR ලේඛනාගාර සැබවින්ම ගබඩා කර ඇත්තේ ZIP ආකෘතියෙනි. මෙලෙස ඔබට සාමාන්ය zip ගොනුවක් jar සමඟ උපුටා ගත හැක. වෙනස වන්නේ jar zip සංරක්ෂිතයක මධ්යම නාමාවලි අත්සන පරීක්ෂා කිරීමකින් තොරව තොරව ගොනු උපුටා ගැනීමයි.

jar සමඟ zip ගොනුවක් උපුටා ගැනීමට, xvf විකල්පය භාවිතා කරන්න:


$ jar xfv sample.zip

මධ්යම නාමාවලි වාර්තාව අස්ථානගත වීම හේතුවෙන් "ZLIB ආදාන ප්රවාහයේ අනපේක්ෂිත අවසානය" ඔබට තවමත් දෝෂයක් පෙනෙනු ඇත. නමුත් jar සංරක්ෂිතය පරිලෝකනය කර ඒවායේ දේශීය ගොනු ශීර්ෂයන් මත පදනම්ව තනි ගොනු එකින් එක උපුටා ගනී.

සංරක්ෂිතය අසම්පූර්ණ නම්, මුල් zip සංරක්ෂිතයේ ගබඩා කර ඇති සෑම ගොනුවක්ම ඔබට උපුටා නොගැනීමට ඉඩ ඇත. තවත් අවවාදයක් නම්, මුල් සංරක්ෂිතය මීට පෙර විවිධ යාවත්කාලීන කිරීම් සිදු කළේ නම් (උදා., සංරක්ෂිතයේ ඇති ගොනු ඉවත් කිරීම/යාවත්කාලීන කිරීම), මධ්යම නාමාවලියෙන් තොරව ඒවායේ ගොනු ශීර්ෂ මත පදනම්ව පමණක් ගොනු උපුටා ගැනීම යල් පැන ගිය ගොනු උකහා ගැනීමට හේතු විය හැක.

දෙවන ක්රමය: fastjar

Debian මත පදනම් වූ Linux මත, ඔබට jar විධානය භාවිතා කිරීමට පමණක් විශාල JDK ස්ථාපනය කිරීමට අවශ්ය නොවේ. ඒ වෙනුවට, ඔබට fastjar භාවිතා කළ හැක, එය මුල් ජාවා මත පදනම් වූ jar විධානයේ සැහැල්ලු C ක්රියාත්මක කිරීමකි. සම්පූර්ණ fastjar පැකේජය 200KB ට වඩා අඩුය.

jar හා සමානව, fastjar විධානය නිස්සාරණයට පෙර මධ්යම නාමාවලි අත්සන පරීක්ෂා නොකරයි.

Ubuntu, Debian, Linux Mint හි fastjar ස්ථාපනය කිරීමට:


$ sudo apt install fastjar

fastjar සමඟ zip ගොනුවකින් ගොනු සම්පීඩනය කිරීමට:


$ fastjar xfv sample.zip

නිස්සාරණය අතරතුර ඔබට "CRCs නොගැලපේ" දෝෂයක් ද දැකිය හැක.

තුන්වන ක්රමය: zip

zip විධානය (unzip සඳහා ප්රතිවිරුද්ධ කොටස) "fix කිරීමට -FF (හෝ --fixfix) විකල්පයක් සපයයි " සිප් ලේඛනාගාරයක් වන අතර එය කපා හැර ඇති අතර එමඟින් මධ්යම නාමාවලි අත්සන මග හැරී ඇත. මෙම විකල්පය සමඟ, zip විධානය ආරම්භයේ සිට zip ගොනුව පරිලෝකනය කර මධ්යම නාමාවලිය ප්රතිනිර්මාණය කිරීමට උත්සාහ කරයි.

සංරක්ෂිතය නිවැරදි කිරීමට, පහත ආකෘතියෙන් zip විධානය ක්රියාත්මක කරන්න. ස්ථාවර ලේඛනාගාරයක නම සඳහන් කිරීමට --out විකල්පය භාවිතා කරයි.


$ zip -FF sample.zip --out sample_fixed.zip

ඉන්පසු ස්ථාවර සංරක්ෂිතය සම්පීඩනය කිරීමට උත්සාහ කරන්න:


$ unzip sample_fixed.zip

හතරවන ක්රමය: 7zip

කප්පාදු කරන ලද zip ගොනුවක් සමඟ කටයුතු කිරීමට තවත් විකල්පයක් වන්නේ, zip ගොනු සඳහා තවත් සංරක්ෂිත වැඩසටහනක් වන 7zip විධානය භාවිතා කිරීමයි.

jar හෝ fastjar ට සමානව, 7z විධානය නිස්සාරණයට පෙර මධ්යම නාමාවලි අත්සනෙහි අවසානය පරීක්ෂා නොකරයි.


$ 7z x sample.zip

විධානය උපුටා ගැනීමේදී සංරක්ෂිතයේ අනපේක්ෂිත අවසානය අනතුරු ඇඟවීමට ඉඩ ඇත.