একাধিক অনির্দিষ্ট ডিরেক্টরি অনুসন্ধান করতে আমি কীভাবে গ্রেপ ব্যবহার করতে পারি?


21

মনে হতে পারে আমি এই প্রশ্নটির মতো একই জিনিস জিজ্ঞাসা করছি তবে আমার বিভিন্ন প্রয়োজনীয়তা রয়েছে। এটি আমার ফাইল সিস্টেমের একটি উদাহরণ:

  • / কোড /
    • অভ্যন্তরীণ /
      • দেব /
      • প্রধান /
    • সর্বজনীন /
      • দেব /
      • প্রধান /
      • মুক্তি/
    • সরঞ্জামগুলি চালু /

/code/internal/dev/, /code/public/dev/এবং /code/tools/একাধিক প্রকল্পের জন্য সাব-ডিরেক্টরি অন্তর্ভুক্ত। আমি এর Dev শাখায় প্রায় একচেটিয়াভাবে কাজ /code/internal/এবং /code/public/, এবং প্রায়ই আমি পাশাপাশি সেইসব ডিরেক্টরিগুলি থেকে একটি টেক্সট স্ট্রিং এর জন্য অনুসন্ধান করতে চান /code/tools/(যা কোন শাখা আছে)। এই দৃষ্টান্তগুলিতে আমাকে তিনটি পৃথক কমান্ড করতে হবে:

$ grep -r "some string" /code/internal/dev/
$ grep -r "some string" /code/public/dev/
$ grep -r "some string" /code/tools/

এটি জানতে একটি একক আদেশ আছে কিনা তা জানতে চাই। যদি তা না হয় তবে আমার সম্ভবত একটি সাধারণ বাশ স্ক্রিপ্ট লেখা দরকার।

উত্তর:


38

গ্রেপ দেখার জন্য আপনি বেশ কয়েকটি পাথকে একত্রিত করতে পারেন:

grep -r "some string" /code/internal/dev/ /code/public/dev/ /code/tools/

এটি তাই সুস্পষ্ট। কেন আমি এই ভেবে দেখিনি ?!
ডেভিড কেনেডি

আসলে, grep: /code/internal/dev/*.cs: No such file or directoryযদি না আমি *.csকমান্ড থেকে অপসারণ করি তবে এটি ত্রুটি ছুঁড়ে দেয় । এটি আমার দোষ কারণ আমি *.csআমার প্রশ্নটি মূলত রেখেছি।
ডেভিড কেনেডি

14

আপনি যদি ওয়াইল্ডকার্ডের সর্বাধিক ব্যবহার করতে চান (এবং আপনার পোস্ট করা শ্রেণিবদ্ধতা সম্পূর্ণ), আপনি এটি করতে পারেন

grep -r "some string" /code/{*/dev,tools}/*.cs

ব্যাখ্যা:

সম্পন্ন প্রথম পদক্ষেপটি হ'ল বন্ধনীযুক্ত তালিকার সম্প্রসারণ। foo{bar,baz}quxপ্রসারিত হয় foobarqux foobazqux। তা হল, তালিকার প্রতিটি কমা-বিচ্ছিন্ন আইটেমের জন্য পৃথক শব্দ উত্পন্ন হয়েছে যার সাথে প্রত্যেকে উপসর্গ এবং পোস্টফিক্স অংশ সংযুক্ত রয়েছে। কীভাবে এটি কাজ করে তা আপনি দেখতে পাবেন

echo A{1,2,3,4}B

যা ফলাফল

A1B A2B A3B A4B

নোট করুন যে এটি একাধিক ধনুর্বন্ধনী এবং খালি যুক্তিগুলির সাথেও কাজ করে; উদাহরণ স্বরূপ

echo {,1,2}{0,1,2}:{2,3}

দেয়

0:2 0:3 1:2 1:3 2:2 2:3 10:2 10:3 11:2 11:3 12:2 12:3 20:2 20:3 21:2 21:3 22:2 22:3

সুতরাং বন্ধনী প্রসারণের পরে, আপনার কমান্ডটি দেখতে এরকম দেখাচ্ছে:

grep -r "some string" /code/*/dev/*.cs /code/tools/*.cs

পরবর্তী পদক্ষেপটি ওয়াইল্ডকার্ড সম্প্রসারণ। আপনি ইতিমধ্যে জানেন যে *.csঅংশটির জন্য, তবে এটি মধ্যবর্তী ডিরেক্টরিগুলির জন্যও কাজ করে; তদ্ব্যতীত, যদি নিম্নলিখিত /অনুসরণ করা হয় তবে কেবল ডিরেক্টরিগুলি মেলা হয়। সুতরাং আপনার শ্রেণিবিন্যাস দেওয়া (এবং .csফাইলগুলির জন্য ফাইলের নাম তৈরি করা ), আপনি আদেশটি পাবেন:

grep -r "some string" /code/internal/dev/file1.cs /code/internal/dev/file2.cs /code/public/dev/file3.cs /code/tools/file4.cs /code/tools/file5.cs

এই সমস্ত ঘটনার পরে কেবল এই grepআর্গুমেন্টের তালিকার সাথে ডেকে আনা হয়েছে (নোট করুন যে আপনার মূল কমান্ডগুলির সাথে একই ঘটনা ঘটে; grepকখনও দেখতে পাওয়া যায় না *; bashকল করার আগে এটি সম্পূর্ণরূপে সম্পন্ন করা হয় grep)।

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