* .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.