উত্তর:
আপনি যদি সত্যিই তাদের সমান্তরালভাবে সঙ্কুচিত করতে চান তবে আপনি করতে পারেন
for i in *zip; do unzip "$i" & done
তবে, এন। জিপ ফাইলগুলির জন্য এন প্রক্রিয়াগুলি চালু করবে এবং এটি আপনার সিস্টেমে খুব ভারী হতে পারে। আরও নিয়ন্ত্রিত পদ্ধতির জন্য, একবারে মাত্র 10 টি সমান্তরাল প্রক্রিয়া চালু করে দেখুন:
find . -name '*.zip' -print0 | xargs -0 -I {} -P 10 unzip {}
চালু হওয়া সমান্তরাল প্রক্রিয়াগুলির সংখ্যা নিয়ন্ত্রণ করতে, -Pআপনি যা চান তা পরিবর্তন করুন । আপনি যদি উপ-ডিরেক্টরিতে পুনরাবৃত্তি করতে না চান তবে পরিবর্তে এটি করুন:
find . -maxdepth 1 -name '*.zip' -print0 | xargs -0 -I {} -P 10 unzip {}
বিকল্পভাবে, আপনি মন্তব্যগুলিতে @ ওলেট্যাঞ্জের পরামর্শ অনুযায়ী জিএনইউ সমান্তরাল ইনস্টল করতে পারেন
parallel unzip ::: *zip
-execবা -execdirপরিবর্তে পাইপিং xargs। এটি কেবল বোঝা সহজ নয়, এটি ত্রুটি-প্রবণতাও কম এবং সিস্টেম সংস্থানগুলিও ব্যবহার করে। find . -name '*.zip' -exec unzip {} ';'(আপনাকে অবশ্যই আধা-কোলনের উদ্ধৃতি দিতে হবে))
-exec \;(আপনি সেমিকোলন এড়াতে পারবেন, কোটের প্রয়োজন নেই), প্রতিটি কমান্ড ক্রমান্বয়ে চালাবেন। -exec +ভাল তবে এটি এখানে কাজ করবে না যেহেতু এটি কীভাবে unzipকাজ করে না ।
গনুহ সমান্তরাল কমান্ড ভাল জিনিস এই ধরনের উপযুক্ত। পরে:
$ sudo apt-get install parallel
তারপর
ls *.zip | parallel unzip
এটি প্রতিটি কোরকে সমস্ত কাজ শেষ না হওয়া অবধি একটি আনজিপ নিয়ে ব্যস্ত রেখে আপনার যতটা কোর দেবে তা ব্যবহার করবে।
echo *.zipকোনও সম্ভাব্য এলএস উরফকে অতিরিক্ত তথ্য স্নিগ্ধ করা থেকে রক্ষা করার পরিবর্তে এটি ব্যবহার করা আরও ভাল ধারণা । যাইহোক, এটি @ গুরুর উত্তর হিসাবে একই সমস্যা রয়েছে, এটি হোয়াইটস্পেসযুক্ত ফাইলের নাম ভাঙে।
xargsGNU এর বিপরীতে সমান্তরাল স্থান / ট্যাব / উদ্ধৃতিযুক্ত ফাইলের নাম ভাঙবে না । কেবলমাত্র ফাইলের নামগুলিতে নিউলাইন রয়েছে তবে আপনাকে অতিরিক্ত যত্ন নিতে হবে। উদাহরণস্বরূপ ব্যবহার করে:parallel unzip ::: *.zip
echoব্যবহার হিসাবে খারাপ হিসাবে ls। গ্লোব্বিং এবং কিছুক্ষণের লুপটি সবচেয়ে নিরাপদ।
.zipআপনার ফোল্ডারে যদি অনেকগুলি ফাইল থাকে এবং আপনি সেগুলির সবগুলি সঙ্কুচিত করতে চান তবে টার্মিনালটি খুলুন এবং এটি ব্যবহার করে আপনার ফোল্ডারে যান:
cd <path_to_folder>
আপনার সমস্ত .zipফাইল সঙ্কুচিত করতে এখন এই আদেশটি ব্যবহার করুন:
ls *.zip | xargs -n1 unzip
echo *.zipসম্ভাব্য lsউরফটিকে অতিরিক্ত তথ্য ছিনিয়ে নেওয়া থেকে বিরত রাখার পরিবর্তে ব্যবহার করা আরও ভাল ধারণা , তবে এটি এখনও শ্বেত স্পেসের সমস্যার সমাধান করে না।
lsস্ক্রিপ্টগুলির জন্য কখনই আউটপুটের উপর নির্ভর করবেন না কারণ সংস্করণগুলির মধ্যে এর আউটপুটটি সঠিকভাবে সংজ্ঞায়িত করা হয়নি। পরিবর্তে @terdon এর উত্তরটি দেখুন কারণ এটি এই সমস্যার সমস্ত সমস্যার সমাধান করে।
আপনি -execযেমন পছন্দ মত ব্যবহার করতে পারেন ,
find . -name "*.zip" -exec unzip {} \;
এই হবে যদি ফাইল নামে একটি স্থান রয়েছে কাজ করি।
unzip \*.zip অথবা unzip '*.zip'
সুস্পষ্টভাবে unzip *.zipকাজ করে না, কারণ শেল এটিকে প্রসারিত করে unzip foo.zip bar.zip ...এবং unzipপ্রথম ফাইলের নাম জিপ ফাইল হিসাবে এবং নীচের ফাইলের নামগুলি সেই জিপ ফাইল থেকে আহরণের জন্য ফাইল হিসাবে ব্যাখ্যা করে।
তবে unzipইউনিক্স কমান্ডগুলির মধ্যে কিছুটা অস্বাভাবিক যে এটি নিজস্ব গ্লোব সম্প্রসারণ করে। যদি *শেলটি দিয়ে প্রসারিত না হয় তবে আনজিপ এটি করবে এবং ফলস্বরূপ সমস্ত ফাইলের নাম জিপ ফাইলগুলি প্রক্রিয়া করার জন্য ব্যাখ্যা করবে। সুতরাং এই বিশেষ ক্ষেত্রে, একটি forলুপ বা অন্যান্য xargsমত ছাড়া পালাতে পারেন।