একটি বিশেষ স্ট্রিংয়ের জন্য ডিরেক্টরিতে সমস্ত। জাভা ফাইলগুলি গ্রেপ করুন


12

আমি কীভাবে বর্তমান ডিরেক্টরিতে ম্যাক ওএস এক্স-এর সমস্ত সরকারী ডিরেক্টরিতে সরল স্ট্রিং (কোনও রেজেক্স নয়) এর জন্য সমস্ত জাভা ফাইল অনুসন্ধান করব? আমি কেবল ফাইল এবং ডিরেক্টরি নামের সাথে মেলে এমন একটি তালিকা মুদ্রণ করতে চাই।


এটি জিজ্ঞাসা করার জন্য ধন্যবাদ তাই আমার দরকার নেই। এখন আমাকে ".git" কে কীভাবে বাদ দিতে হবে এবং আমি কিছুক্ষণের জন্য সম্পন্ন করেছি।
ড্যান রোজনস্টার্ক

আমি মনে করি জেএসের উত্তরটি আরও সংক্ষিপ্ত, এখনও আপনাকে টাইপ করতে হবে - অন্তর্ভুক্ত করুন, তবে এখনও suc এটি গোপন করার জন্য সম্ভবত একটি উপাধি লিখতে পারে
ক্রেগ টাটারিন

উত্তর:


19

এবং সর্বদা জনপ্রিয়

find . -name '*.java' | xargs grep -l 'string'

সম্পাদনা (ফ্রাঙ্ক এসকার্বা দ্বারা):

যদি আপনি ফাইলের নাম বা ডিরেক্টরিতে ফাঁকা স্থানের ডিরেক্টরিগুলি নিয়ে কাজ করে থাকেন তবে এটি করার নিরাপদতম উপায় হল:

find . -name '*.java' -print0 | xargs -0 grep -l 'string'

এটি করার একাধিক উপায় সবসময় আছে।



11

Questionতিহ্যবাহী ইউনিক্স উত্তরটিই এই প্রশ্নের জন্য গৃহীত হয়েছিল:

find . -name '*.java' | xargs grep -l 'string'

এটি সম্ভবত জাভা ফাইলগুলির জন্য কাজ করবে, তবে ফাইলের নামগুলির স্থানগুলি ম্যাকের উপর প্রচলিত ইউনিক্সের চেয়ে অনেক বেশি সাধারণ। উপরের পাইপলাইন দিয়ে স্পেস সহ ফাইলের নামগুলি পাস করার সময়, xargs পৃথক শব্দের বিভিন্ন নাম হিসাবে ব্যাখ্যা করবে।

আপনি যা চান তা হ'ল নামগুলিকে সীমানাটি দ্ব্যর্থহীন করার জন্য আলাদা করতে হবে:

find . -name '*.java' -print0 | xargs -0 grep -l 'string'

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


ফাইল নামগুলির মধ্যে ফাঁকা স্থান থাকার জন্য আপনি xargs এ "--replace" বিকল্পটি ব্যবহার করতে পারেন: ... | xargs --replace গ্রেপ 'স্ট্রিং' '{}' (name} ফাইলের নাম দ্বারা প্রতিস্থাপন করা হবে)
অরথর্ন

1
আধুনিক সংস্করণগুলি (ওএস এক্সে ইনস্টলিত একটি সহ) সমর্থন করে "-exec <command> {} +" "যেখানে শেষে প্লাস চিহ্নটি (\; এর পরিবর্তে)" যতটা সম্ভব পথের নাম দিয়ে "replace replace প্রতিস্থাপন করতে বলে ... এটি xargs (1) "এর সাথে মিল (" ম্যান পৃষ্ঠা থেকে)।
ডগ হ্যারিস

7

গ্রিপ, এসকের চেয়ে ভাল গ্রেপ ব্যবহার করুন :

ack -l --java  "string" 

3
acc ডিফল্টরূপে ম্যাক ওএস এক্সে ইনস্টল করা হয়নি।
জন টপলি 20

"ডিফল্ট" এর অর্থ আমি জানি না। অনেকগুলি ওএসে, আপনি যা ইনস্টল করেন তা চয়ন করেন তাই সর্বদা উপস্থিত থাকা প্রোগ্রামগুলি খুঁজে পাওয়া শক্ত। একসময়, একটি সি সংকলক সর্বদা সেখানে ছিল এবং পার্লটি ছিল অস্বাভাবিক ...
বোর্টজমিয়ার

1
এর অর্থ এটি স্ট্যান্ডার্ড ওএস ইনস্টলের অংশ। আমার ম্যাকে বিকাশকারী সরঞ্জাম ইনস্টল আছে এবং তারা এসিসি ইনস্টল করে না। আপনার নিজের এটি ইনস্টল করতে হবে। আপনার যদি এটি থাকে তবে এটি একটি দুর্দান্ত বাক্য গঠন।
জন টপলি

অ্যাকের ক্ষেত্রে এটি কোনও একক পার্ল প্রোগ্রাম যার কোনও মডিউল নির্ভরতা নেই। আপনি যদি আপনার bin / বিন ডিরেক্টরিতে প্রোগ্রামগুলি "ইনস্টল" করতে পারেন তবে আপনি ঠিক তত সহজেই "ইনস্টল" এসকে করতে পারেন।
অ্যান্ডি লেস্টার

4

এটি চাইলে প্রকৃতপক্ষে একটি রেজেক্স ব্যবহার করবে, কেবল মেটাচ্যাকার্টার থেকে দূরে থাকুন, বা তাদের থেকে পালাতে পারেন এবং আপনি স্ট্রিং অনুসন্ধান করতে পারেন।

find . -iname "*.java" -exec egrep -il "search string" {} \;


3
grep -rl --include="*.java" simplestring *

1
এটি এখানে সেরা উত্তর বলে মনে হচ্ছে - গ্রেপ যদি সব কিছু করে তবে কেন সন্ধান করুন এবং xargs ব্যবহার করবেন?
পিটার গিবসন

এফওয়াইআই, প্রশ্নে যা জিজ্ঞাসা করা হয়েছে তা প্রদত্ত, এটি কমান্ডের মধ্যে "এল" বড় নয় "এল" হওয়া উচিত
ক্রেগ টাটারিন

ক্রেগ ঠিক আছে, আমি আমার উত্তর সংশোধন করেছি।
জেএস।

1

যেহেতু এটি একটি ওএসএক্স প্রশ্ন, তাই এখানে আরও একটি ওএসএক্স নির্দিষ্ট উত্তর রয়েছে।

কমান্ড লাইন থেকে এড়িয়ে যান findএবং ব্যবহার করুন Spotlight। আরও অনেক শক্তিশালী!

কম্যান্ড লাইন স্পটলাইট - গ্রেট মিট খুঁজে

বেশিরভাগ লোক জানেন না আপনি কমান্ড লাইন থেকে স্পটলাইট অনুসন্ধান করতে পারবেন। কেন সমস্ত তীরচিহ্নগুলি অনুসন্ধান এবং গ্রেপ বিকল্পগুলি মনে রাখবেন এবং যখন স্পটলাইটটি আপনাকে কাজ করতে দিতে পারে না তখন কী নয় not স্পটলাইটে কমান্ড লাইন ইন্টারফেসকে এমডিফাইন্ড বলে। এটি জিইউআই স্পটলাইট অনুসন্ধানের মতো একই ক্ষমতা এবং আরও অনেক কারণ এটি কমান্ড লাইনে স্ক্রিপ্টযোগ্য!


0

এই একবার যান:

grep -rl "string" */*java

1
এটি ম্যাক ওএস এক্সে "গ্রেপ: * / * জাভা: এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই"
জন টপালি

এখানে সমস্যাটি হ'ল এটি কেবল *। জাভা ফাইলগুলিকে এক স্তর গভীর থেকে খুঁজে পাবে। আইএমএইচওর জন্য এটি করার সঠিক উপায় হিসাবে মার্ক থালম্যানের উত্তর দেখুন।
লুডউইগ ওয়েইঞ্জিয়েরেল

দুঃখিত, আমার ম্যাক এ না গ্রেপের ম্যাক সংস্করণে -r (রিকার্সিভ) পতাকা নেই?
dwj

এটি করে তবে এটি যে আউটপুটটি আমি পেয়েছিলাম সেগুলি অনুসন্ধান করার সময় আমি জানতাম যে এটি ফাইলগুলিতে রয়েছে।
জন টপলি 20


0
grep "(your string)" -rl $(find ./ -name "*.java")

আপনি যদি কেসটি উপেক্ষা করতে চান তবে -rl--irl এর সাথে প্রতিস্থাপন করুন। (আপনার স্ট্রিং) কোনও রেজেক্সও হতে পারে যদি আপনি কখনও প্রয়োজন দেখেন।

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