আপনি গ্লোবস্টারও ব্যবহার করতে পারেন।
জানার জবাব অনুসারে বিল্ডিং grepকমান্ডfind হ'ল এটি করার একটি অত্যন্ত শক্তিশালী, বহুমুখী এবং বহনযোগ্য উপায় ( সুডোডাসের উত্তরও দেখুন )। আর muru ব্যবহারের একটি চমৎকার পদ্ধতির পোস্ট করেছে grep'র --includeবিকল্প । তবে আপনি যদি কেবল grepকমান্ড এবং আপনার শেলটি ব্যবহার করতে চান তবে এটি করার আরও একটি উপায় রয়েছে - আপনি শেলটি নিজেই প্রয়োজনীয় পুনরাবৃত্তি সম্পাদন করতে পারেন :
shopt -s globstar # you can skip this if you already have globstar turned on
grep -H 'pattern' **/file.txt
-Hপতাকা তোলে grepফাইলের নাম এমনকি যদি শুধুমাত্র একটি ম্যাচিং ফাইল পাওয়া যায় প্রদর্শন করুন। আপনি পাস করতে পারেন -a, -iএবং -nপতাকা (আপনার উদাহরণ থেকে) grepপাশাপাশি, যদি যে আপনার যা প্রয়োজন। তবে পাস করবেন না -rবা -Rএই পদ্ধতিটি ব্যবহার করার সময়। এটা শেল যে উল্লিখিত glob ধারণকারী প্যাটার্ন সম্প্রসারণে ডিরেক্টরি recurses **, এবং নাgrep ।
এই নির্দেশাবলী বাশ শেলের সাথে সুনির্দিষ্ট। উশুন্টুতে ব্যাশ হ'ল ডিফল্ট ব্যবহারকারী শেল (এবং বেশিরভাগ অন্যান্য জিএনইউ / লিনাক্স অপারেটিং সিস্টেম), সুতরাং আপনি যদি উবুন্টুতে থাকেন এবং আপনার শেলটি কী তা জানেন না তবে এটি অবশ্যই বাশ Bash যদিও জনপ্রিয় শেলগুলি সাধারণত ডিরেক্টরি-ট্র্যাভারিং **গ্লোবগুলিকে সমর্থন করে , তারা সবসময় একইভাবে কাজ করে না। আরো তথ্যের জন্য, দেখুন Stéphane Chazelas এর চমৎকার উত্তর করতে ম ফল *, ম ** এবং ম *** উপর Unix.SE ।
কিভাবে এটা কাজ করে
চালু করলে তা globstar ব্যাশ শেল বিকল্প তোলে **ম্যাচ ডিরেক্টরির বিভাজক ধারণকারী পাথ ( /)। এটি একটি ডিরেক্টরি পুনরাবৃত্তি গ্লোব। বিশেষত, হিসাবে man bashব্যাখ্যা:
যখন গ্লোবস্টারের শেল বিকল্পটি সক্ষম করা থাকে, এবং * কোনও পথের নাম প্রসারণ প্রসঙ্গে ব্যবহৃত হয়, তখন একক প্যাটার্ন হিসাবে ব্যবহৃত দুটি সংলগ্ন * গুলি সমস্ত ফাইল এবং শূন্য বা আরও ডিরেক্টরি এবং সাব ডিরেক্টরিতে মিলবে। যদি একটি / দ্বারা অনুসরণ করা হয় তবে দুটি সংলগ্ন * গুলি কেবল ডিরেক্টরি এবং উপ-ডিরেক্টরিগুলির সাথে মিলবে।
আপনার এটি সম্পর্কে সতর্ক হওয়া উচিত, যেহেতু আপনি যে কমান্ডগুলি চালিয়ে যেতে পারেন যা আপনার ইচ্ছার চেয়ে অনেক বেশি ফাইল সংশোধন বা মুছতে পারে, বিশেষত আপনি **যখন লিখতে চেয়েছিলেন তখন লেখেন *। (এটি এই কমান্ডে নিরাপদ, যা কোনও shopt -u globstarআইল পরিবর্তন করে না)) গ্লোবস্টারের শেল বিকল্পটি আবার বন্ধ করে দেয়।
গ্লোবস্টার এবং এর মধ্যে কয়েকটি ব্যবহারিক পার্থক্য রয়েছে find।
findগ্লোবস্টারের চেয়ে অনেক বেশি বহুমুখী। গ্লোবস্টারের সাথে আপনি যা কিছু করতে পারেন, আপনি findকমান্ডটি দিয়েও করতে পারেন । আমি গ্লোবস্টারটি পছন্দ করি এবং কখনও কখনও এটি আরও সুবিধাজনক তবে গ্লোবস্টার এর সাধারণ বিকল্প নয় find।
উপরের পদ্ধতিটি ডিরেক্টরিগুলির ভিতরে দেখতে পারে না যার নাম a দিয়ে শুরু হয় .। কখনও কখনও আপনি এই জাতীয় ফোল্ডার পুনরাবৃত্তি করতে চান না, তবে কখনও কখনও আপনি তা করেন।
একটি সাধারণ গ্লোবের মতো, শেলটি সমস্ত মিলের পাথের একটি তালিকা তৈরি করে এবং সেগুলি grepবিশ্বব্যাপী নিজের জায়গায় আপনার কমান্ডের ( ) আর্গুমেন্ট হিসাবে দেয়। যদি আপনার কাছে এমন অনেকগুলি ফাইল বলা হয়ে থাকে file.txtযে ফলস্বরূপ কমান্ডটি সিস্টেমটি কার্যকর করতে খুব দীর্ঘ হয় তবে উপরের পদ্ধতিটি ব্যর্থ হবে। অনুশীলনে আপনার (কমপক্ষে) হাজার হাজার ফাইলের প্রয়োজন ছিল, তবে এটি ঘটতে পারে।
যে পদ্ধতিগুলি ব্যবহার করে findসেগুলি এই বিধিনিষেধের সাপেক্ষ নয়, কারণ:
Zanna এর উপায়grep সম্ভাব্য অনেক পাথ আর্গুমেন্ট সহ একটি কমান্ড তৈরি করে এবং পরিচালনা করে । তবে যদি একটি ফাইলকে আরও একটি তালিকাতে তালিকাবদ্ধ করা যায় তার চেয়ে বেশি ফাইল খুঁজে পাওয়া যায়, তবে +নির্ধারিত -execকর্মটি কয়েকটি পাথ দিয়ে কমান্ডটি চালায়, তারপরে আবার আরও কয়েকটি পথ দিয়ে চালায় এবং আরও কিছু করে। grepএকাধিক ফাইলে স্ট্রিংয়ের জন্য আইংয়ের ক্ষেত্রে, এটি সঠিক আচরণ করে।
এখানে আচ্ছন্ন করা গ্লোবস্টারের পদ্ধতির মতো, এটি প্রতিটি মিলিয়ে পাথগুলি সহ সমস্ত মিলিত লাইনগুলি মুদ্রণ করে।
সুডোডাসের পথgrep প্রতিটি সন্ধানের জন্য পৃথকভাবে চলে file.txt। যদি অনেকগুলি ফাইল থাকে তবে এটি অন্য কয়েকটি পদ্ধতির তুলনায় ধীর হতে পারে তবে এটি কার্যকর হয়।
এই পদ্ধতিটি ফাইলগুলি সন্ধান করে এবং তাদের পাথগুলি মুদ্রণ করে, তারপরে যদি কোনও হয় তবে লাইনগুলি মিলবে। এটি আমার পদ্ধতি, জানার এবং মুড়ু দ্বারা উত্পাদিত ফর্ম্যাট থেকে আলাদা আউটপুট ফর্ম্যাট ।
সাথে রঙিন হচ্ছে find
গ্লোবস্টার ব্যবহারের তাত্ক্ষণিক সুবিধাগুলির মধ্যে একটি হ'ল, উবুন্টুতে ডিফল্টরূপে বর্ণযুক্ত grepআউটপুট তৈরি করা হবে। কিন্তু আপনি সহজেই এই সঙ্গে পেতে পারেন find, অত্যধিক ।
ব্যবহারকারী উবুন্টু সঙ্গে নির্মিত অ্যাকাউন্ট উপনাম করে তোলে grepসত্যিই চালানো grep --color=auto(রান alias grepদেখতে)। এটি একটি ভাল জিনিস যে আপনি ব্যক্তিগতভাবে ইন্টারঅ্যাকটিভভাবে ইস্যু করার সময় এ্যালিয়াসগুলি প্রসারিতভাবে প্রসারিত হবে তবে এর অর্থ হ'ল আপনি যদি পতাকাটির সাথে findডাকতে চান তবে আপনাকে এটি স্পষ্টভাবে লিখতে হবে। উদাহরণ স্বরূপ:grep--color
find . -name file.txt -exec grep --color=auto -H 'pattern' {} +