একাধিক ডিরেক্টরি পৃথক জিপ ফাইলগুলিতে জিপ করতে আদেশ


40

আমার একক ডিরেক্টরি রয়েছে যা এর ভিতরে কয়েক ডজন ডিরেক্টরি রয়েছে।

আমি কমান্ড লাইনে নতুন এবং আমি একটি কমান্ড নিয়ে আসার জন্য সংগ্রাম করছি যা প্রতিটি উপ-ডিরেক্টরিকে একটি অনন্য সাব-ডাইরেক্টরি.জিপ ফাইলটিতে জিপ করবে will

সুতরাং শেষ পর্যন্ত আমার প্রাথমিক ডিরেক্টরিটি আমার সমস্ত মূল সাব-ডিরেক্টরি, এবং সেই সাথে সংশ্লিষ্ট .zipফাইলগুলিতে প্রতিটি উপ-ডিরেক্টরিতে জিপড থাকা সামগ্রী সহ পূর্ণ হবে।

এই সম্ভব ভালো কিছু হয়? যদি তা হয় তবে দয়া করে আমাকে কীভাবে তা শেষ করে দিন।


আমি আপনাকে পরামর্শ দিচ্ছি যে শেলটিতে "লুপগুলির জন্য" কীভাবে করা যায়। এমন অনলাইনার রয়েছে যা আপনি যা করতে পারেন তা করতে পারেন তবে একটি সুন্দর লুপটি আরও পরিষ্কার হবে।
lynxlynxlynx 21 '21 এ

সুতরাং এর অর্থ কি আমার আলাদা শেল স্ক্রিপ্ট লিখতে হবে এবং তারপরে কমান্ড লাইন থেকে সেই স্ক্রিপ্টটি কল করা উচিত? এই জাতীয় প্রাথমিক প্রশ্নের জন্য দুঃখিত। যদিও আমার কাছে কিছু প্রোগ্রামিংয়ের অভিজ্ঞতা রয়েছে তবে আমার কাছে এই জিনিসটি নতুন।
ইভস্টার

উত্তর:


75

আপনি এই লুপটি ব্যবহার করতে পারেন bash:

for i in */; do zip -r "${i%/}.zip" "$i"; done

iলুপ ভেরিয়েবলের নাম। */বর্তমান ডিরেক্টরিটির প্রতিটি উপ-ডিরেক্টরি বোঝায় এবং সেগুলির মধ্যে একটি পিছনে স্ল্যাশ অন্তর্ভুক্ত থাকবে। cdএটি কার্যকর করার আগে আপনি সঠিক জায়গায় নিশ্চিত হন। "$i"পিছনে স্ল্যাশ সহ কেবল সেই ডিরেক্টরিটির নাম দেয়। উদ্ধৃতি চিহ্নগুলি নিশ্চিত করে যে ডিরেক্টরি নামের সাদা অংশটি সমস্যার কারণ হবে না। ${i%/}মত $iতবে পেছনের স্ল্যাশ সরানো সহ, তাই আপনি জিপ ফাইলটির নাম তৈরি করতে এটি ব্যবহার করতে পারেন।

আপনি যদি এটি কীভাবে কাজ করে তা দেখতে চান তবে এর echoআগে একটি অন্তর্ভুক্ত করুন zipএবং সম্পাদিত পরিবর্তে মুদ্রিত কমান্ডগুলি দেখতে পাবেন।


ধন্যবাদ এটি দুর্দান্ত দেখাচ্ছে! তবে একটি সম্ভাব্য সমস্যা যা আমি ভেবেছিলাম: এই উপ-ডিরেক্টরিটির মধ্যে থাকা সমস্ত ডিরেক্টরিকে আলাদা ফাইলগুলিতে জিপ করা হবে? আমি কেবলমাত্র প্রথম স্তরের সাব-ডিরেক্টরিকে একক সংকোচিত ফাইল হিসাবে জিপ করতে চাই। আমি ২ য় স্তরের, তৃতীয় স্তরের সাব-ডিরেক্টরি ইত্যাদির জন্য অতিরিক্ত জিপ ফাইল তৈরি করতে চাই না ... দয়া করে আমাকে তা জানান কিনা তা দয়া করে আমাকে জানান। আবার ধন্যবাদ!
ইভাস্টার

আপনার মতো কেবল প্রথম স্তরেরই অনুরোধ করেছেন।
lynxlynxlynx

*/নাম যে সরাসরি সাব না যে বংশধর ডিরেক্টরি। সুতরাং আপনি কেবলমাত্র উচ্চ স্তরের স্তরের জন্য জিপগুলি পাবেন, ঠিক সেভাবেই। echoএটির সাথে সংস্করণটি সেই দিকটি প্রদর্শন করেছিল। প্রতিটি নেস্টেড ডিরেক্টরিকে তার নিজের ফাইলে জিপ করা আসলে আরও কাজ হবে এবং find -type dঅন্য কৌশলগুলির মধ্যে ব্যবহার করে সম্ভবত সবচেয়ে ভাল সমাধান করা হবে ।
এমভিজি

1
@ ফ্রিটজমগ: আমার লিনাক্সের একটি স্থানীয় পরীক্ষা পরামর্শ দেয় যে হ্যাঁ, একটি বিন্দুতে শুরু হওয়া ফাইলগুলি অন্তর্ভুক্ত রয়েছে। এটি তথ্য-জিপ সরঞ্জামের সম্পত্তি হবে, আমি যে আদেশ দিয়েছি তা নয়, সুতরাং আপনার zipবাইনারিটি কী নির্ভর করে আপনি বিভিন্ন আচরণ পেতে পারেন। ডট দিয়ে শুরু করে শীর্ষ স্তরের ডিরেক্টরিগুলির জন্য (যেমন বর্তমান ডিরেক্টরিগুলির শিশুদের) জন্য জিপ ফাইলগুলি তৈরি করতে, আপনি shopt -s dotglobগ্লোব নিদর্শনগুলিও লুকানো ফাইলগুলির সাথে মিলে যায়।
এমভিজি

1
: একটি জিপ যা তার রুট হিসাবে পেরেন্ট ডাইরেক্টরি নেই তৈরি করতেfor i in */; do (cd "$i"; zip -r "../${i%/}.zip" .); done
ক্রিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.