কীভাবে ফাইন্ড-এক্সেক চালাবেন?


477

আমি বর্তমান ডিরেক্টরিতে ফাইলগুলি খুঁজে পেতে চাই যাতে "ক্রোম" লেখা রয়েছে।

$ find . -exec grep chrome
find: missing argument to `-exec'

আমি কি ভুল করছি?



আমি পেয়েছিfind: Only one instance of {} is supported with -exec ... +
কোস্টা

উত্তর:


710

আপনি একটি ;( \;শেলটি ব্যাখ্যা থেকে রোধ করার জন্য এখানে পালিয়ে গেছেন ) বা একটি +এবং একটি মিস করেছেন {}:

find . -exec grep chrome {} \;

অথবা

find . -exec grep chrome {} +

findকার্যকর করা হবে grepএবং {}পাওয়া ফাইলের নামগুলি সনাক্ত করে itute ;এবং এর মধ্যে পার্থক্য +হ'ল প্রতিটি ফাইলের জন্য ;একটি একক grepকমান্ড দিয়ে মৃত্যুদন্ড কার্যকর করা হয় যেখানে যতগুলি +সম্ভব ফাইলগুলি grepএকবারে প্যারামিটার হিসাবে দেওয়া হয় ।


30
যদি আপনি use ব্যবহার করেন; এন্ডিং কনস্ট্রাক্ট গ্রেপ একবারে একটি ফাইল পাস করা হয়, সুতরাং এটি ডিফল্টরূপে ফাইলের নাম প্রদর্শন করে না, কেবল মিলিত লাইনগুলি। পরিবর্তে একটি ফাইল তালিকা পেতে grep -lsঅনুসন্ধানের অভ্যন্তরের অভ্যন্তরীণ ব্যবহার যুক্ত করুন ।
কালেব

9
find . -exec grep foo {} +আপনাকে এর মতো আউটপুট দেখাবে./dir/file.py:from foo import bar
এসজি

10
find . -exec grep foo {} \;আপনাকে এর মতো আউটপুট দেখাবেfrom foo import bar
এসএজি

9
find . -exec grep -l foo {} +আপনাকে এর মতো আউটপুট দেখাবে./dir/file.py
এসএজি

8
find . -exec grep -l foo {} \;আপনাকে এরকম আউটপুট দেখাবে./dir/file.py
এসজি

46

আপনার এটির findজন্য মোটেও ব্যবহার করার দরকার নেই ; গ্রেপ বর্তমান ডিরেক্টরিতে থাকা সমস্ত কিছুর তালিকা থেকে ফাইলগুলি খোলার পরিচালনা করতে সক্ষম:

grep chrome *

... অথবা এমনকি ফোল্ডার এবং এর অধীনে সমস্ত কিছুর জন্য পুনরাবৃত্তভাবে:

grep chrome . -R

22
প্রসারটি ARG_MAX এর ওপরে গেলে গ্রেপ চেপে যাবে। -আর সহজেই কিছু ফাইল (-নাম, ইত্যাদি) বাদ দিতে আদিমগুলিকে যুক্ত করতে পারে এমনকি সাব-ট্রি (-প্রুন )ও দেখতে পাবে না এমন সময় ব্যবহার করতে গিয়ে সমস্ত কিছু দেখতে পাবেন R
মেল

6
মেল ভাল পয়েন্টসমূহ। আমার বক্তব্যটি ছিল যে সমস্ত সম্ভাবনামত জিজ্ঞাসাবাদী পক্ষ findযখন grepকাজটি করতে পারে তখন পরিচয় করিয়ে দেওয়ার চেয়ে তাদের বিষয়গুলি আরও জটিল করে তুলছিল , তবে কিছু ক্ষেত্রে বাইরে যাওয়ার আগে ফাইল তালিকাকে সূক্ষ্মভাবে সন্ধান করা আরও কার্যকর হবে গ্রেপ করা
কালেব

4
@ মেল grepএমন ক্ষেত্রে শ্বাসরোধ করে না, execকরে।
ক্রিস ডাউন

সমস্ত ফাইল একই ডিরেক্টরিতে থাকলে কেবল সেগুলি কাজ করে না, যখন সেগুলি সাব-ডিরেক্টরিতে ছড়িয়ে থাকে।
ইয়াবা

1
@ ইয়াবা আমার উত্তরটিতে সাব-ডিরেক্টরিতে ছড়িয়ে থাকা ফাইলগুলির কেস কীভাবে পরিচালনা করতে হবে তা উল্লেখ করেছে।
কালেব

18
find . | xargs grep 'chrome'

আপনি এটি করতে পারেন:

find . | xargs grep 'chrome' -ls

প্রথমটি আপনাকে ফাইলগুলির লাইনগুলি দেখায়, দ্বিতীয়টি কেবল ফাইলগুলি তালিকাভুক্ত করে।

কালেবের বিকল্পটি আরও কম, কী-স্ট্রোক কম।


11
সমস্যাটি xargsহ'ল এটি আশা করে যে এর ইনপুটটি অদ্ভুত উপায়ে উদ্ধৃত করা হবে যা findউত্পাদন করে না। সুতরাং find … | xargs …আপনার যদি সাদা নাম বা ফাইল রয়েছে এমন ফাইলের নাম থাকে তবে এটি কাজ করে না \'"
গিলস

3
@ গিলস আপনি এমন কিছু ব্যবহার করে সমস্যাটি পেতে পারেন find . | xargs -n1 -iX grep "X" 'chrome'যাতে যুক্তি একবারে একবারে খাওয়ানো হয় এবং উদ্ধৃত হয়। স্পষ্টতই এই উদাহরণটি পরিচালনা করার জন্য এটি একটি মারাত্মকভাবে অদক্ষ উপায়, তবে কিছু পরিস্থিতিতে এটি দুর্দান্ত it's
কালেব

সম্পূর্ণতার জন্য আমাদের 'গ্রেপ' এর সাথে সংবেদনশীলতার ক্ষেত্রে -i বিকল্পটিও উল্লেখ করা উচিত। ক্ষেত্রে-সংবেদনশীলতার জন্য-নামটিও রয়েছে।
ম্যাথিউ

9
@ কালেব: xargsলিনাক্স ফাইলের নামগুলির সাথে মোকাবিলা করার একমাত্র 100% নির্ভরযোগ্য উপায় হ'ল NUL find ... -print0 | xargs -0কে বিভাজক হিসাবে ব্যবহার করা। বিকল্প - xargs -d '\n'বিভাজক হিসাবে নিউলাইন ব্যবহার করে, 99% নির্ভরযোগ্যতা।
মাধ্যাকর্ষণ

আমি এটি প্রায়শই ব্যবহার করি তবে ফাইলের খুব দীর্ঘ তালিকাগুলির জন্য এটি ব্যর্থ হবে, যেখানে সন্ধানী-এক্সেক বিজয়ী হয়।
স্পেসমুজ

5

অনুসন্ধান একটি উপায় এবং the_silver_searcherআপনি যা করতে হবে তা হ'ল চেষ্টা করতে পারেন

ag chrome

এটি সমস্ত ফাইলে ক্রোম অনুসন্ধান করবে (উপ ডিরেক্টরি অন্তর্ভুক্ত) এবং এটি অনুসন্ধানের চেয়ে দ্রুত


এছাড়াও পিটি (প্ল্যাটিনাম অনুসন্ধানকারী, github.com/monochromegane/the_platinum_searcherউপলব্ধ ) রয়েছে যা IMHO দ্রুত কাজটি করে - কিছু সংখ্যক ফাইল থাকলেও তাতে কিছু আসে যায় না।
হুপ্পিং বনি

1

লাইনের পরিবর্তে ফাইলগুলির তালিকা দেখতে:

grep -l "chrome" *

বা:

grep -r -l "chrome" .

1

আমি সাধারণত কীভাবে সন্ধান / নির্বাহ ব্যবহার করি তার একটি উদাহরণ এখানে ...

find  . -name "*.py" -print -exec fgrep hello {} \;

এটি সমস্ত .py ফাইলগুলির জন্য পুনরাবৃত্তভাবে অনুসন্ধান করে এবং প্রতিটি ফাইল মুদ্রণ (গুলি) এর জন্য ফাইলের নাম এবং fgrep এর 'হ্যালো' ফাইলের (প্রতিটিটির জন্য) ফাইলের জন্য। আউটপুট দেখতে দেখতে (কেবল আজ একটি দৌড়ে):

./r1.py
./cgi-bin/tst1.py
print "hello"
./app/__init__.py
./app/views.py
./app/flask1.py
./run.py
./tst2.py
print "hello again"

1
: আপনার কর্মপ্রবাহ সঙ্গে জগাখিচুড়ি, কিন্তু আপনি পছন্দ করতে পারেন না find . -name "*.py" -exec fgrep -l hello {} \; এটা যে মেলে ফাইলের ফাইলের নামের প্রিন্ট করব এবং অন্য কিছুই -
জেফ স্ক্যালার হলেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.