* .C ফাইলগুলির জন্য রিকার্সিভ গ্রেপ ব্যর্থ


13

আমি নিম্নলিখিত পদ্ধতিতে সমস্ত .c ফাইলগুলিতে পুনরাবৃত্তভাবে একটি প্যাটার্ন অনুসন্ধান করার চেষ্টা করেছি

> grep -lr search-pattern *.c

কিন্তু আউটপুট হিসাবে এটি পেয়েছি

> grep: *.c: No such file or directory

যখন আমি এটি ব্যবহার করি:

> grep -lr search-pattern *

আমি প্রচুর পেয়েছি। প্যাটার্ন সহ ডিরেক্টরিতে ফাইল ফাইল।

পূর্বের অভিব্যক্তিটি কী ভুল?

উত্তর:


22

আমি এর --includeবিকল্পটি ব্যবহার করার পরামর্শ দিই grep:

grep -lr --include='*.c' search-pattern .

1
+1 টি। আমি --include=GLOBবিকল্পটি জানতাম না । পুনরাবৃত্তির বিকল্পটির সাথে একত্রে এটি খুব শক্তিশালী এবং এর প্রয়োজন হয় না find। নিস!
— gertvdijk

এখানে পার্টিতে দেরি হলেও .কমান্ডের শেষে কী রয়েছে তা নিয়ে আমি বিভ্রান্ত ।
— নাথান জোনস

1
@ নাথান জোনস: গ্রেপের জন্য এক বা একাধিক ফাইলের নাম বা ডিরেক্টরি প্রয়োজন যা অনুসন্ধান করতে হবে। বিন্দুটি বলেছেন: বর্তমান ডিরেক্টরিতে অনুসন্ধান করুন
— enzotib

3

*.cপ্যাটার্ন আপনার শেল দ্বারা মূল্যায়ন করা হয়। এটি আপনার ব্যবহারের মতো বর্তমান ডিরেক্টরিতেও প্রযোজ্য ls *.c।

আমি মনে করি আপনি পরিবর্তে যা চান তা হ'ল *.cপ্যাটার্নের সাথে মিলে যাওয়া সমস্ত ফাইলগুলি grepঅনুসন্ধান করা (পুনরাবৃত্তভাবে) এবং এতে আপনার সন্ধান করা। এটি করার জন্য এখানে একটি উপায়:

find . -name "*.c" -print0 | xargs --null grep -l search-pattern

এটি xargsদ্বারা অনুসন্ধান ফলাফল সংযোজন ব্যবহার করে find।


বিকল্পভাবে, সন্ধান করতে -execবিকল্পটি ব্যবহার করুন , যেমন:

find . -name "*.c" -exec grep -l search-pattern "{}" \;

এছাড়াও, আপনি সত্যিকারের -lবিকল্পটি চান কিনা তাও আমি নিশ্চিত নই grep। এটি প্রথম ম্যাচে থামবে:

-l, --files-with-matches
      Suppress normal output; instead print the name of  each
      input  file  from which output would normally have been
      printed.  The scanning will stop on  the  first  match.
      (-l is specified by POSIX.)

find/xargsশূণ্যস্থান ধারণকারী ফাইলের নামের উপর সিনট্যাক্স বিরতি। -Lবিকল্প grepপ্রতিটি ফাইল প্রথম ম্যাচ শেষ করে পরবর্তী ফাইল চালিয়ে যদি এক শুধুমাত্র যদি প্যাটার্ন প্রতিটি দেওয়া ফাইলে একবার অন্তত অন্তর্ভুক্ত করা হয় দেখতে চাই, এটা দ্রুততর হয়।
— এনজোটিব

@ এনজোটিব ধন্যবাদ, -print0বিকল্পটি ব্যবহার করে এটি ঠিক করে দিন এবং xargs --null।
— জার্মটভিডিজক

-1

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

ls | grep "file.*.c"

2
প্রশ্নটি কোনও ফাইল অনুসন্ধান করার বিষয়ে নয়, কোনও প্যাটার্ন অনুসন্ধানের বিষয়ে।
— জয়
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.