আমি কীভাবে বর্তমান ডিরেক্টরিতে ম্যাক ওএস এক্স-এর সমস্ত সরকারী ডিরেক্টরিতে সরল স্ট্রিং (কোনও রেজেক্স নয়) এর জন্য সমস্ত জাভা ফাইল অনুসন্ধান করব? আমি কেবল ফাইল এবং ডিরেক্টরি নামের সাথে মেলে এমন একটি তালিকা মুদ্রণ করতে চাই।
আমি কীভাবে বর্তমান ডিরেক্টরিতে ম্যাক ওএস এক্স-এর সমস্ত সরকারী ডিরেক্টরিতে সরল স্ট্রিং (কোনও রেজেক্স নয়) এর জন্য সমস্ত জাভা ফাইল অনুসন্ধান করব? আমি কেবল ফাইল এবং ডিরেক্টরি নামের সাথে মেলে এমন একটি তালিকা মুদ্রণ করতে চাই।
উত্তর:
এবং সর্বদা জনপ্রিয়
find . -name '*.java' | xargs grep -l 'string'
সম্পাদনা (ফ্রাঙ্ক এসকার্বা দ্বারা):
যদি আপনি ফাইলের নাম বা ডিরেক্টরিতে ফাঁকা স্থানের ডিরেক্টরিগুলি নিয়ে কাজ করে থাকেন তবে এটি করার নিরাপদতম উপায় হল:
find . -name '*.java' -print0 | xargs -0 grep -l 'string'
এটি করার একাধিক উপায় সবসময় আছে।
mdfind
এটি করার আরও একটি ওএসএক্স উপায় !
Questionতিহ্যবাহী ইউনিক্স উত্তরটিই এই প্রশ্নের জন্য গৃহীত হয়েছিল:
find . -name '*.java' | xargs grep -l 'string'
এটি সম্ভবত জাভা ফাইলগুলির জন্য কাজ করবে, তবে ফাইলের নামগুলির স্থানগুলি ম্যাকের উপর প্রচলিত ইউনিক্সের চেয়ে অনেক বেশি সাধারণ। উপরের পাইপলাইন দিয়ে স্পেস সহ ফাইলের নামগুলি পাস করার সময়, xargs পৃথক শব্দের বিভিন্ন নাম হিসাবে ব্যাখ্যা করবে।
আপনি যা চান তা হ'ল নামগুলিকে সীমানাটি দ্ব্যর্থহীন করার জন্য আলাদা করতে হবে:
find . -name '*.java' -print0 | xargs -0 grep -l 'string'
বিকল্পটি হ'ল আপনার জন্য গ্রিপ চালানোর চেষ্টা করুন, যেমন মার্কটি পরামর্শ দেয়, যদিও আপনি প্রচুর সংখ্যক ফাইল অনুসন্ধান করছেন তবে এই পদ্ধতিটি ধীরে ধীরে (ফাইলের পুরো তালিকার সাথে একবারের পরিবর্তে গ্রেপ ফাইলের পরিবর্তে একবার অনুরোধ করা হয়েছে)।
গ্রিপ, এসকের চেয়ে ভাল গ্রেপ ব্যবহার করুন :
ack -l --java "string"
এটি চাইলে প্রকৃতপক্ষে একটি রেজেক্স ব্যবহার করবে, কেবল মেটাচ্যাকার্টার থেকে দূরে থাকুন, বা তাদের থেকে পালাতে পারেন এবং আপনি স্ট্রিং অনুসন্ধান করতে পারেন।
find . -iname "*.java" -exec egrep -il "search string" {} \;
grep -rl --include="*.java" simplestring *
কমান্ড লাইন থেকে এড়িয়ে যান find
এবং ব্যবহার করুন Spotlight
। আরও অনেক শক্তিশালী!
কম্যান্ড লাইন স্পটলাইট - গ্রেট মিট খুঁজে
বেশিরভাগ লোক জানেন না আপনি কমান্ড লাইন থেকে স্পটলাইট অনুসন্ধান করতে পারবেন। কেন সমস্ত তীরচিহ্নগুলি অনুসন্ধান এবং গ্রেপ বিকল্পগুলি মনে রাখবেন এবং যখন স্পটলাইটটি আপনাকে কাজ করতে দিতে পারে না তখন কী নয় not স্পটলাইটে কমান্ড লাইন ইন্টারফেসকে এমডিফাইন্ড বলে। এটি জিইউআই স্পটলাইট অনুসন্ধানের মতো একই ক্ষমতা এবং আরও অনেক কারণ এটি কমান্ড লাইনে স্ক্রিপ্টযোগ্য!
এই একবার যান:
grep -rl "string" */*java
ইন্টারফেসে বিকল্পগুলি যেখানে রয়েছে সেখানে আরও স্বজ্ঞাত অনুসন্ধান করতে আপনি টেক্সটরঙ্গলারের মতো একটি জিইউআই প্রোগ্রামও ব্যবহার করতে পারেন ।
grep "(your string)" -rl $(find ./ -name "*.java")
আপনি যদি কেসটি উপেক্ষা করতে চান তবে -rl--irl এর সাথে প্রতিস্থাপন করুন। (আপনার স্ট্রিং) কোনও রেজেক্সও হতে পারে যদি আপনি কখনও প্রয়োজন দেখেন।