জিপ সংরক্ষণাগারটিতে দীর্ঘ নামের ফাইলগুলি কীভাবে পুনরায় নামকরণ / এক্সট্রাক্ট করা যায়


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

আপনি এই সমস্তটির নাম পরিবর্তন করেছেন, আপনি একটি সাধারণ স্ক্রিপ্টও লিখতে পারেন যা এটি আপনার জন্য স্বয়ংক্রিয়ভাবে করে।


এগুলি অবিশ্বাস্যভাবে দরকারী, ধন্যবাদ! আমি জিপনোট উদাহরণটি কাজ করতে পারিনি - এবং প্রথমটি ফাইলের এক্সটেনশনটি সরিয়ে দেয় - তবে আমার যা করা দরকার তা এটি যথেষ্ট ভাল। ধন্যবাদ!
টেরেন্স ইডেন

আমি উত্তরটি আপডেট করেছি, এখন এটি এক্সটেনশনটিও
রাখবে

IFS= read -r iযদি ফাইলের নামগুলি সাদা স্থানের সাথে শুরু হয় বা শেলটি পালানোর ক্রম হিসাবে ব্যাখ্যা করতে পারে এমন ক্ষেত্রে আপনার ব্যবহার করা উচিত ।
ডেভিড ফোরস্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.