আমি নিম্নলিখিত কমান্ডটি চালানোর চেষ্টা করছি:
find a/folder b/folder -name *.c -o -name *.h -exec grep -I foobar '{}' +
এটি একটি ত্রুটি ফিরিয়ে দিচ্ছে:
find: missing argument to -exec
এই কমান্ডটিতে কী সমস্যা হয়েছে তা আমি দেখতে পাচ্ছি না, যেমনটি ম্যান পৃষ্ঠার সাথে মেলে বলে মনে হচ্ছে:
-exec কমান্ড {} +
-Exec বিকল্পের এই রূপটি নির্বাচিত ফাইলগুলিতে নির্দিষ্ট কমান্ড চালায়, তবে প্রতিটি নির্বাচিত ফাইলের নাম শেষে অন্তর্ভুক্ত করে কমান্ড লাইনটি নির্মিত হয়; কমান্ডের মোট চালকের সংখ্যা মিলিত ফাইলগুলির সংখ্যার তুলনায় অনেক কম হবে। কমান্ড লাইনটি একইভাবে নির্মিত হয়েছে যেমন xargs তার কমান্ড লাইনগুলি তৈরি করে। কমান্ডের মধ্যে '{}' কেবলমাত্র একটি উদাহরণ অনুমোদিত। কমান্ডটি শুরু ডিরেক্টরিতে কার্যকর করা হয়।
আমি চেষ্টাও করেছি:
find a/folder b/folder -name *.c -o -name *.h -exec grep -I foobar {} +
find a/folder b/folder -name *.c -o -name *.h -exec 'grep -I foobar' {} +
find a/folder b/folder -name *.c -o -name *.h -exec 'grep -I foobar' '{}' +
find a/folder b/folder -name "*.c" -o -name "*.h" -exec grep -I foobar '{}' +
find a/folder b/folder \( -name *.c -o -name *.h \) -exec grep -I foobar '{}' +
find a/folder b/folder -name *.c -o -name *.h -exec grep -I foobar '{}' \+
find
। যদিও -exec cmd {} +
ভেরিয়েন্টটি পসিক্স এবং 80 এর দশক থেকে পাওয়া যায়, জিএনইউ এটি সম্প্রতি যুক্ত করেছে (তুলনামূলকভাবে) সম্প্রতি (2005)। কি find --version
বলে?
-exec {} +
2005 সালে 4.2.12 এ যুক্ত করা হয়েছিল older পুরানো জিএনইউতে পাওয়া যায়, -print0 | xargs -r0
অনুরূপ কিছু পেতে আপনি (নন-পসিক্স) ব্যবহার করতে পারেন । 4.1
১৯৯৪
-name
প্যাটার্ন আর্গুমেন্ট উদ্ধৃত করা উচিত: -name "*.c" -o -name "*.h"
। এটি সত্য, যদিও এটি -exec
ত্রুটির সাথে সম্পর্কিত নয় । আপনি লক্ষ্য করবেন যে অন্যান্য সমস্ত উত্তরগুলি ওয়াইল্ডকার্ডগুলিকে উদ্ধৃতিতে রেখেছিল, যদিও কেবল গিলসই এর উল্লেখ করেছেন। … (চালিয়ে যাওয়া)
-name "*.[ch]"
ব্যাখ্যা ছাড়াই নামটির অভিব্যক্তিটি ভেঙে দেয় । এতে কমান্ড লাইনটি সরল করার এবং বিশেষত, মুছে ফেলার সুবিধা রয়েছে -o
। জড়িত এক্সপ্রেশন সঠিকভাবে -o
পাওয়া কঠিন। তোমার ভুল; যদি আপনার আদেশটি স্থির হয়ে থাকে যাতে এটি ত্রুটিযুক্ত না হয় (গিলসের উত্তরে) তবে এটি grep
কেবল .h
ফাইলগুলিতে চলবে । আপনার করা দরকার '(' -name '*.c' -o -name '*.h' ')'
।
+
শেষে পালানোর চেষ্টা করেছেন ?find a/folder b/folder -name *.c -o -name *.h -exec grep -I foobar '{}' \+