ज़िप संग्रह में लंबे नामों के साथ फ़ाइलों का नाम बदलने / निकालने के लिए कैसे


11

मेरे पास एक ज़िप है जिसमें बहुत लंबे नामों वाली फाइलें हैं।

यदि मैं कमांड लाइन पर निकालने की कोशिश करता हूं, तो मुझे "फ़ाइल का नाम बहुत लंबा" त्रुटि मिलती है।
यदि मैं आलेखीय संग्रह प्रबंधक का उपयोग करता हूं तो यह फाइलों को नहीं निकालेगा और यह मुझे उनका नाम बदलने नहीं देगा। यदि मैं संग्रह माउंट करता हूं तो भी यही समस्या है।

मैं व्यक्तिगत रूप से उपयोग करके फ़ाइलों को निकाल और नाम बदल सकता हूं:

unzip -p -c example.zip "long file name.ogg" > shortname.ogg

यह बहुत सारी फाइलों के साथ अव्यावहारिक है।

क्या कोई उपकरण है जो फिल्नामों को काट देगा क्योंकि वे निकाले जाते हैं?


का आउटपुट क्या है unzip -l <ARCHIVE>और आप कैसे नामों को अलग करना चाहते हैं? क्या आप निष्कर्षण के दौरान संग्रह के अंदर निर्देशिका संरचना को बनाए रखना चाहते हैं?
डेविड फ़ॉस्टर

जवाबों:


13

निकालना

हम zipinfoइस प्रक्रिया के एक भाग के रूप में उपयोग कर सकते हैं , यह zipपैकेज से एक कार्यक्रम है ।

zipinfo -2 example.zip

केवल फाइलों के नाम दिखाता है example.zip, कुछ इस तरह दिखता है:

file1-long-name-...-bla-bla.html
file2-long-name-...-bla-bla.html

इसलिए हम सभी फ़ाइलों को निकालने के लिए इस सुविधा का उपयोग कर सकते हैं:

zipinfo -2 example.zip | while read i;
do
  long_fname=${i%.*}
  unzip -p -c example.zip "$i" > "${long_fname:0:250}.${i##*.}"
done;
  • long_fname=${i%.*}: लंबी फ़ाइल नाम से एक्सटेंशन निकालता है, इसलिए फ़ाइल नाम 256 वर्ण से कम होने की स्थिति में; हम डुप्लिकेट एक्सटेंशन प्राप्त नहीं करने जा रहे हैं।
  • ${long_fname:0:250}.${i##*.}: चरित्र की वैध संख्या के साथ एक नया फ़ाइल नाम बनाता है एक .वास्तविक और फ़ाइल एक्सटेंशन भी जोड़ता है ।

बस हम फ़ाइलों की सूची में लूप कर रहे हैं और उनमें से प्रत्येक को एक नए वैध फ़ाइल नाम के साथ निकालते हैं जो 256 वर्ण है।


नाम बदलना

आप zipnoteकमांड का उपयोग कर सकते हैं , यह zipपैकेज का एक हिस्सा भी है।

सबसे पहले अपनी जिप फाइल का बैकअप लें।

यह आदेश चलाएँ:

zipnote example.zip > names

संपादक का उपयोग करके नाम खोलें, यह इस तरह दिखता है:

@ file name long in zip and a lot of other strings in the file name
@ (comment above this line)
@ (zip file comment below this line)

इस तरह नए फ़ाइल नाम जोड़ें:

@ file name long in zip and a lot of other strings in the file name
@=new short name for above file
@ (comment above this line)
@ (zip file comment below this line)

फिर फ़ाइलों का नाम बदलने के लिए:

zipnote -w example.zip < names

आपने उन सभी का नाम बदल दिया, आप एक सरल स्क्रिप्ट भी लिख सकते हैं जो आपके लिए यह स्वचालित रूप से करती है।


वे अविश्वसनीय रूप से उपयोगी हैं, धन्यवाद! मुझे काम करने के लिए zipnote उदाहरण नहीं मिल सका - और पहला वाला फ़ाइल एक्सटेंशन को हटा देता है - लेकिन यह काफी अच्छा है जो मुझे करने की आवश्यकता है। धन्यवाद!
टेरेंस ईडन

मैंने जवाब अपडेट किया, अब यह विस्तार भी रखेगा;)
रेवेक्सिना

यदि आप IFS= read -r iफ़ाइल नामों को सफेद स्थान से शुरू करते हैं या ऐसी चीज़ों का उपयोग करना चाहिए , जो शेल के सीक्वेंस की व्याख्या कर सकती हैं।
डेविड फ़ॉस्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.