একটি একক অন্তর্নির্মিত কমান্ড সহ উপ-ডিরেক্টরিতে ফাইলগুলিতে একটি স্ট্রিংিং সন্ধান করছেন?


10

উইন্ডোজে, আমি যদি সমস্ত উপ-ডিরেক্টরিতে সমস্ত ফাইল জুড়ে একটি স্ট্রিং সন্ধান করতে চাই, তবে আমি এমন কিছু করব

findstr /C:"the string" /S *.h

যাইহোক, লিনাক্স (বলুন, উবুন্টু) আমি জড়িত কিছু পাইপ কমান্ড চেয়ে অন্য কোন উপায় পাওয়া যায় find, xargsএবং grep(: একটি উদাহরণ এই পৃষ্ঠার এ ? আমি কিভাবে যাও recursively একটি উপ-ডিরেক্টরির মাধ্যমে grep করতে )। তবে, আমার প্রশ্নটি আলাদা: আমার শেল স্ক্রিপ্ট না লিখে কোনও একক, অন্তর্নির্মিত কমান্ড কি এই যাদুটির মাধ্যমে কাজ করে?

উত্তর:


19

জিএনইউ গ্রেপ সাব-ডাইরেক্টরিগুলির মাধ্যমে পুনরাবৃত্তভাবে অনুসন্ধানের অনুমতি দেয়:

grep -r --include='*.h' 'the string' .

আমি উবুন্টুতে এই সঠিক কমান্ড লাইনের চেষ্টা করেছি তবে "গ্রেপ: অবৈধ বিকল্প - 'এম'" পেয়েছি যদিও আমি কোথাও কোনও 'এম' দেখতে পাচ্ছি না ... বিস্মিত
গুইডো ডোমেনেসি

@Guido ওয়ার্কস জরিমানা এখানে উপর
phunehehe

একটি প্রস্তাবিত সম্পাদনা TomasG পরিবর্তন পরামর্শ দেওয়া হচ্ছে গত *করার '*': "গত ওয়াইল্ডকার্ড বরাত দিয়ে এড়ানোর ত্রুটি প্রয়োজন হয় যখন কিছু ফাইলের নাম শুরু হয় -"
মাইকেল Mrozek

ঘটনাগুলির এক অদ্ভুত মোড়কে, এটি এখন আমার পক্ষেও কাজ করে, যেমন মূল উত্তরে প্রবেশ করানো হয়েছে। ধন্যবাদ!
গুইডো ডোমেনেসি

1
@ গুয়েডো: আপনার সমস্যাটি বর্তমান ডিরেক্টরিটিতে ডাকা একটি ফাইল -Msomethingবা একটি GREP_OPTIONSসেটিংয়ের কারণে হতে পারে ।
গিলস 'অশুভ হওয়া বন্ধ করুন'

2

grep -r searchpattern /path/to/start/in

বর্তমান ডিরেক্টরিতে /path/to/start/in/কেবল " ." কোথায় থাকতে পারে ?


1

না find -name \*.h -print0 | xargs -0 grep -l 'the regex'এটি যতটা যাদু পায় তেমন।


জিএনইউ গ্রেপ এর -rঅপশন সহ সাধারণ ক্ষেত্রে অন্তর্নির্মিত রয়েছে । ভারী আর্টিলারি দরকার নেই।
গিলস 'অশুভ হওয়া বন্ধ করুন'

3
xargsশুধু গোলমাল যোগ করুন। ব্যবহার করুনfind -name \*.h -execdir grep -l 'the regex {} +
ব্যবহারকারী অজানা

0

এমন কোন একক, অন্তর্নির্মিত কমান্ড রয়েছে যা এই যাদুটির মাধ্যমে কাজ করে ...?

পেডেন্টিক হতে, না, আপনি এমন কোনও কমান্ড অনুমান করতে পারবেন না

ইউনিক্সের অনেকগুলি বিভিন্ন বাস্তবায়ন রয়েছে এবং প্রত্যেকটির আলাদা আলাদা স্পর্শ রয়েছে। POSIX, সাধারণ ডিনোমিনেটর (এবং ইউনিসে জুড়ে একটি মানের নিকটতম জিনিস) এর জন্য কোনও বিকল্প নির্দিষ্ট করে নাgrep

অন্যান্য উত্তরে উল্লিখিত হিসাবে, জিএনইউ এর বাস্তবায়নের grepএকটি মানহীন বিকল্প রয়েছে যা আপনি যা চান তা করে। যদিও এই বিশেষ প্রয়োগটি লিনাক্স সিস্টেমে সাধারণ হতে পারে তবে আপনি কোনও ইউনিক্স এমনকি কিছু লিনাক্স সিস্টেমে এর উপলব্ধতা ধরে নিতে পারবেন না।

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

আপনার ক্ষেত্রে, ফাইল সিস্টেম ক্রল করা এবং একটি স্ট্রিমের সাথে মিলে যাওয়া রেজিপ্স্প দুটি পৃথক কাজ। প্রতিটি পৃথক প্রোগ্রামে চিকিত্সা করা স্বাভাবিক।


0

প্রদত্ত ডিরেক্টরি থেকে স্ট্রিং সন্ধান করতে নীচের কমান্ডটি ব্যবহার করুন

find <fullDirectoryPath> -name '*' -exec grep -l '<StringToFind>' {} \;

উদাহরণ স্বরূপ:

find /apps_bev/apps/xfer/export/02210 -name '*' -exec grep -l '38221000001032' {} \;

1
grepআর্গুমেন্ট হিসাবে একাধিক ফাইল নিতে পারে, সুতরাং আপনার প্রতি ফাইল প্রতি একটি অনুরোধ চালানো এড়াতে +পরিবর্তে ব্যবহার করা উচিত যা যথেষ্ট অকার্যকর। \;grep
স্টাফেন চেজেলাস

1
নোট করুন যে -name '*'বর্তমানের লোকালে (কিছু findপ্রয়োগে অন্তত কিছু ক্ষেত্রে ) বৈধ পাঠ্যযুক্ত এমন ফাইলগুলিতে সীমাবদ্ধ রয়েছে তবে অন্যান্য ডিরেক্টরি উপাদানগুলিতে এখনও বাইটের ক্রম থাকতে পারে যা বৈধ অক্ষর তৈরি করে না। যদি এর সাথে আপনার অভিপ্রায়টি -name '*'নিশ্চিত হয় যে আউটপুটটি বৈধ পাঠ্য রয়েছে (ভুল নাম দিয়ে ফাইলগুলি বাদ দিয়ে), আপনি বরং ব্যবহার করতে চাইবেন find ... ! -name '*' -prune -o -exec grep ... {} +, যা findভুল নাম দিয়ে ডিরেক্টরিতে নামাও বন্ধ করবে ।
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.