উত্তর:
গতির পার্থক্য নগণ্য হবে।
তবে আপনাকে এটি নিশ্চিত করতে হবে:
আপনার স্ক্রিপ্ট ধরে নিবে না যে কোনও ফাইলের ফাইলের নামে জায়গা, ট্যাব ইত্যাদি থাকবে না; প্রথম সংস্করণটি নিরাপদ, দ্বিতীয়টি নয়।
আপনার স্ক্রিপ্ট " -" দিয়ে শুরু করা কোনও ফাইলকে বিকল্প হিসাবে বিবেচনা করবে না ।
সুতরাং আপনার কোডটি দেখতে এমন হওয়া উচিত:
find . -exec cmd -option1 -option2 -- {} +
অথবা
find . -print0 | xargs -0 cmd -option1 -option2 --
প্রথম সংস্করণটি সংক্ষিপ্ত এবং সহজ লেখার জন্য আপনি 1 টি -exec cmd {} +এড়াতে পারবেন, তবে দ্বিতীয় সংস্করণটি আরও পোর্টেবল এবং নিরাপদ, কারণ জিএনইউ আবিষ্কারুগুলিতে " " তুলনামূলকভাবে নতুন বিকল্প (2005 সাল থেকে প্রচুর চলমান সিস্টেমে এটি এখনও থাকবে না) এবং এটি সম্প্রতি বগি ছিল । এছাড়াও প্রচুর লোকেরা এটি " -exec cmd {} +" জানেন না , যেমন আপনি অন্যান্য উত্তর থেকে দেখতে পারেন।
execফলাফলগুলি যেমন পাওয়া গেছে তার ফলাফল হিসাবে ব্যবহার xargsকরবে, তবে মনে হয় স্টাডআউটে লেখার আগে পুরো ডিরেক্টরিটি অনুসন্ধান না হওয়া পর্যন্ত অপেক্ষা করুন। যদি আপনি এটি একটি বৃহত ডিরেক্টরিতে চেষ্টা করে দেখছেন, এবং মনে হচ্ছে এটি xargsকাজ করছে না, ধৈর্য্য ধরে রাখার পরামর্শ দেওয়া হচ্ছে।
-print0রিটার্নের ফাইলের নামগুলি নিউলাইন দিয়ে পৃথক করা হয়, তবে নিউলাইনও এটিকে অস্পষ্ট করে তোলে এমন একটি ফাইল নামের অংশ হতে পারে। বাইট 0 পারে না, সুতরাং এটি নিরাপদ বিভাজক। হ্যাঁ - --একটি কমান্ডে সমর্থন করা যা এটি সমর্থন করে এটি একটি ভাল অনুশীলন যখন আপনি এর যুক্তিগুলি নিয়ন্ত্রণ করতে পারবেন না, এমনকি যদি সর্বদা কঠোরভাবে প্রয়োজনীয় বা অনিরাপদ নাও থাকে।
find . | xargs cmd
আরও দক্ষ (এটি প্রতিটি ম্যাচের জন্য একবার cmdদৌড়ে বিপরীতে exec, এটি যতবার সম্ভব চালিত হয় cmd)। যাইহোক, যদি ফাইলের নামগুলিতে ফাঁকা জায়গা বা মজাদার অক্ষর থাকে তবে আপনি সমস্যার মধ্যে পড়ে যাবেন।
নিম্নলিখিত ব্যবহার করার পরামর্শ দেওয়া হচ্ছে:
find . -print0 | xargs -0 cmd
এমনকি যদি ফাইলের নামের ভীতু অক্ষর থাকতে কাজ করবে ( -print0তোলে findNUL-সমাপ্ত ম্যাচ মুদ্রণ -0তোলে xargsএই বিন্যাসে আশা।)
xargsকোনও ফাইলের (বা কেবল কয়েকটি) মিলে যাওয়া ফাইলগুলি cmdনা থাকলে এবং প্রতিটি ফাইলের জন্য খুব বেশি কিছু করার না থাকলে অ্যাপ্রোচটি আসলে উল্লেখযোগ্যভাবে ধীর হয় । উদাহরণস্বরূপ, খালি ডিরেক্টরিতে চালিত হওয়ার পরে, xargsসংস্করণটি কমপক্ষে দ্বিগুণ সময় নেবে, যেহেতু কেবল একটির পরিবর্তে দুটি প্রক্রিয়া শুরু করা উচিত। (হ্যাঁ, পার্থক্যটি সাধারণত *