শেল স্ক্রিপ্টে লুপগুলি সহ এটি করার বিভিন্ন উপায় রয়েছে, সন্ধান করুন এবং জার্গার্স রয়েছে। এর মধ্যে কোনটি সেরা, এবং কোনটি সবচেয়ে বহনযোগ্য?
শেল স্ক্রিপ্টে লুপগুলি সহ এটি করার বিভিন্ন উপায় রয়েছে, সন্ধান করুন এবং জার্গার্স রয়েছে। এর মধ্যে কোনটি সেরা, এবং কোনটি সবচেয়ে বহনযোগ্য?
উত্তর:
find . -exec <command> {} \;
গাছের মূল হিসাবে বা সাধারণভাবে বর্তমান ডিরেক্টরিতে:
find <directory> -exec <command> {} \;
-name "*.c"বা উদাহরণস্বরূপ -type dডিরেক্টরিতে ...
find ... | xargs ...আইডিয়ামটি ব্যবহার করুন , এটি ব্যাচগুলিতে ফাইলগুলি প্রক্রিয়া করে এবং এটি সাধারণত দ্রুত হয় (কম প্রক্রিয়া প্রবর্তন করা হয়)।
-print0বিকল্পের সন্ধানের জন্য বিকল্প এবং -0বিকল্পগুলির সাথে xargsযদি আপনার শূন্যস্থান সহ ফাইল বা ডিরেক্টরি নাম থাকে:
find {dir} -print0 | xargs -0r {command}
-print0হিসাবে একটি বিকল্প আউট ফাইলের নামের কপি করে প্রিন্ট এটি NUL-separated বরং হোয়াইটস্পেস চেয়ে তালিকা পৃথকীকৃত, যখন -0বিকল্প xargsএটা নির্দেশ করে তার ইনপুট বিরতি NULবরং হোয়াইটস্পেস হয়। যেহেতু NULইউনিক্স ফাইলনামগুলিতে এমন একটি অক্ষর অনুমোদিত নয় যা ফাইলনামের অংশের জন্য এটির ভুল হওয়ার কোনও উপায় নেই।
-rবিকল্প এত যে xargsআপনি একটি ত্রুটি দেবে না যদি এটা কোন ইনপুট হয়েছে।
যদি বহনযোগ্যতা একটি সমস্যা হয় তবে আমি এটি করার শেল-নির্দিষ্ট উপায়গুলি থেকে দূরে থাকব (প্রচুর লোক প্রচুর শেল ব্যবহার করে প্রচুর লোক রয়েছে, তবে সাধারণভাবে সন্ধান করা এবং জার্গাগুলি আসলেই এমন মৌলিক সরঞ্জাম যা কেউ কোনও র্যাডিক্যাল উপায়ে পরিবর্তনের সাহস পায় না) ।
ফাইন্ড এবং xargs এর প্রাথমিক আর্গুমেন্টগুলি ব্যবহার করা আপনাকে আরও বহনযোগ্য সমাধান দিতে হবে।
যদি এক সাথে যুক্তিগুলি দলবদ্ধভাবে গ্রহণযোগ্য হয়, তবে | xargs সম্ভবত আরও ভাল পারফরম্যান্স দেবে, যেহেতু এটি কমান্ডটি ফাইন্ড-এক্সেকের চেয়ে অনেক কম সময় কার্যকর করবে। আপনি যদি প্রতিটি ফাইলের জন্য প্রতিবার কমান্ডটি প্রয়োগ করতে চান বা ফাইলের উপ-ডিরেক্টরিতে এক্সিকিউট করতে চান তবে আপনার সম্ভবত ফাইন্ড-এক্সেক বা-এক্সেকডির ব্যবহার করা উচিত।
একটি নিয়ম হিসাবে, শেল-নির্দিষ্ট লুপগুলি থেকে দূরে থাকা ভাল rable সন্ধান করুন এবং xargs বেশিরভাগ দৃশ্যের জন্য যথেষ্ট।
নিশ্চিত হয়ে নিন যে আপনি যে কমান্ডটি ব্যবহার করছেন তার সংস্করণটিতে পুনরাবৃত্তির ক্রিয়াকলাপের জন্য ইতিমধ্যে একটি পতাকা নেই। :)
find [args] -print | xargs {command}
আমার জন্য সবচেয়ে ভাল কাজ করে।