গ্রীপ কীভাবে 'এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই' ত্রুটিটি প্রিন্ট না করে থাকতে পারি?


215

আমি গিট দ্বারা পরিচালিত কোডের একটি বৃহত স্তূপের মধ্য দিয়ে চেপে যাচ্ছি এবং যখনই আমি একটি গ্রেপ করি, আমি ফর্মের বার্তাগুলির পাইলস এবং গাদাগুলি দেখি:

> grep pattern * -R -n
whatever/.git/svn: No such file or directory

এই লাইনগুলি সরিয়ে দেওয়ার কোনও উপায় আছে কি?


1
আজকাল আমি ব্যবহার বলতে চাই ag, ackঅথবা cgrepপরিবর্তে - তারা অনেক দ্রুত বেশী ভালো আছেন / grepকোডের আধারগুলির মধ্যে অনুসন্ধানের জন্য।
lunixbochs

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

2
কোনও ব্যবহারকারী কীভাবে No such file or directoryফাইল এবং / অথবা ডিরেক্টরিতে বিদ্যমান ডিরেক্টরিগুলির জন্য বার্তা পেতে পারেন ? অথবা, বিপরীতে, কীভাবে grep *বিদ্যমান ফাইলগুলির নাম পাওয়া যাবে? এটি কি এমন একটি দৌড় শর্ত, যেখানে grepচলমান চলাকালীন অন্য কিছু প্রক্রিয়া ডিরেক্টরি ট্রি (ফাইল তৈরি, পুনরায় নামকরণ এবং মুছে ফেলা) চালিত করে?
স্কট

উত্তর:


299

ত্রুটি দমন করতে আপনি -sবা --no-messagesপতাকা ব্যবহার করতে পারেন ।

-s, --no- বার্তা ত্রুটি বার্তা দমন করে

grep pattern * -s -R -n

14
@ অ্যালেক্স @ ডগবার্ট এটি প্রশ্নের উত্তর দেয় তবে '-s' সমস্যার মুখোমুখি করতে পারে, উদাহরণস্বরূপ যখন আপনি গ্রেপ দিয়ে এক্সআরজ ব্যবহার করেন। একটি dir, 'aaa.txt' এবং 'a b.txt' এ দুটি ফাইল তৈরি করার চেষ্টা করুন, উভয় স্ট্রিংটিতে কিছু 'টেক্সট' রয়েছে। কমান্ডটি /bin/ls -1 | xargs grep 'some text'আপনাকে "এ জাতীয় কোনও ফাইল বা ডিরেক্টরি দেবে না" কারণ এটি 'a b.txt' কে 2 টি আর্গে বিভক্ত করে। আপনি যদি চাপা দেন, তবে খেয়াল করবেন না যে আপনি কোনও ফাইল মিস করেছেন।
কেলভিন

@Kelvin করে, যেমন যদি আমি ব্যবহার findএবং ব্যবহার print0সঙ্গে xargs -0যে সমস্যা সমাধান করতে সক্ষম? ধন্যবাদ
লুকা

1
@ লুকা যে বিষয়টি সমাধান করা উচিত। আপনি যদি সবসময় এই NUL বিকল্পগুলি ব্যবহার করেন তবে আপনি সমস্যার মধ্যে পড়বেন না, তবে আপনি যদি এটি না করেন তবে এটির প্রায় গ্যারান্টিযুক্ত (আইএমএইচও) যা আপনি সবচেয়ে ইনোপোর্টিউন সময়ে ভুলে যাবেন।
কেলভিন

এটি ম্যাক ওএস এক্সে কাজ করে যেখানে অন্যান্য বিকল্পগুলি (--quiet) না করে
ফিল্মসেম

59

আপনি যদি গিট সংগ্রহস্থলের মাধ্যমে গ্রেপিং করে থাকেন তবে আমি আপনাকে ব্যবহার করার পরামর্শ দিচ্ছি git grep। আপনার প্রবেশের -Rবা পথে যাওয়ার দরকার নেই ।

git grep pattern

এটি আপনার বর্তমান ডিরেক্টরি থেকে সমস্ত মিল দেখায়।


5
দরকারী গিট-নির্দিষ্ট কমান্ডের জন্য +1। যদিও
এসএনএন-এর

2
+1 এই গিট কমান্ডটি আমি হারিয়ে যাচ্ছি - এটি আমাকে কোনও প্রতিশ্রুতিতে গাছের অবস্থা থেকে স্ট্রিংয়ের জন্য গ্রেপ করতে দেয় ("প্যাটার্ন" এর পরে কমিট যোগ করে)।
কেলভিন

1
পলাতক প্লাগইন সহ, Ggrepবর্তমান ডিরেক্টরিটির পরিবর্তে গিট ডিরেক্টরিটির শীর্ষ থেকে শুরু করে অনুসন্ধানগুলি।
সিরো সান্তিলি :4 冠状 病 六四 事件 法轮功

এটি স্ট্যান্ডার্ড গ্রেপের তুলনায় উল্লেখযোগ্যভাবে দ্রুত গতিযুক্ত বলে মনে হচ্ছে। (সম্ভবত এটি বাইনারি ফাইলগুলি ইত্যাদি উপেক্ষা করে? কোনও ধারণা নয়, তবে দরকারী))
ড্যানিয়েল

10

এর মতো ত্রুটিগুলি সাধারণত "স্ট্যান্ডার্ড ত্রুটি" প্রবাহে প্রেরণ করা হয়, যা আপনি কোনও ফাইলে পাইপ দিতে পারেন বা সর্বাধিক আদেশগুলিতে অদৃশ্য হয়ে যেতে পারেন:

grep pattern * -R -n 2>/dev/null

প্রশ্নের উত্তর দেয়, তবে সমস্যার মুখোশ দিতে পারে। ডগবার্ট এর উত্তরে আমার মন্তব্য দেখুন।
কেলভিন

5

আমি দেখেছি বেশ কয়েকবার ঘটছে, ভাঙা লিঙ্কগুলির সাথে (সিমলিংকগুলি যেগুলি উপস্থিত নেই এমন ফাইলগুলির দিকে নির্দেশ করে), গ্রেপ লক্ষ্যবস্তু ফাইলটিতে অনুসন্ধান করার চেষ্টা করে, যা বিদ্যমান নেই (সুতরাং সঠিক এবং সঠিক ত্রুটির বার্তা)।

কনসোল দিয়ে সিসাদমিন কাজ করার সময় আমি সাধারণত বিরক্ত করি না, তবে স্ক্রিপ্টগুলির মধ্যে থেকে আমি "ফাইন্ড" দিয়ে পাঠ্য ফাইলগুলি সন্ধান করি এবং তারপরে প্রত্যেককে গ্রেপ করি:

find /etc -type f -exec grep -nHi -e "widehat" {} \;

পরিবর্তে:

grep -nRHi -e "widehat" /etc

4

আমি সাধারণত গ্রেপকে পুনরাবৃত্তি করতে দেয় না। আপনি বাদ দিতে চান এমন কয়েকটি ডিরেক্টরি সাধারণত থাকে (.git, .svn ...)

আপনি এই মত স্ট্যান্ড সঙ্গে চতুর উপকরণ করতে পারেন:

find . \( -name .svn -o -name .git \) -prune -o -type f -exec grep -Hn pattern {} \;

এটি প্রথম নজরে ওভারকিল মনে হতে পারে, তবে যখন আপনাকে কিছু নিদর্শনগুলি ফিল্টার করতে হবে তখন এটি বেশ কার্যকর।


1
+1 টি। এটি ত্রুটিগুলি দমন করার চেয়ে অনেক ভাল। তবে আমি মনে করি আপনি -execআপনার গ্রেপের আগে ভুলে গেছেন ।
কেলভিন

1
এটার মানে কি? \( -name .svn -o -name .git \)
sbhatla

গ্রেপের - এক্সক্লুড বা - এক্সক্লুড-ডির পতাকা ব্যবহার করবেন না কেন?
চয়েলটন বি। হিগিনবটম

1
@sbhatla প্রথম বন্ধনী ফাইন্ড কমান্ডের জন্য ক্রিয়াকলাপ তৈরি করে। stackoverflow.com/questions/24338777/...
Choylton বি Higginbottom

4

আপনি কি xargs মধ্যে -0বিকল্প চেষ্টা করে ? এটার মতো কিছু:

ls -r1 | xargs -0 grep 'some text'

2
আপনার প্রিন্ট0 যুক্ত হওয়া সন্ধানের জন্যfind -print0 | xargs -0 grep 'text'
আলিভা

1

-Iগ্রেপ ব্যবহার করুন ।

উদাহরণ: grep SEARCH_ME -Irs ~/logs


1
-Iবাইনারি ফাইলগুলি এড়িয়ে যায় - এটি সমতুল্য --binary-files=without-match। যদিও এটি "এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই" বার্তা দমন করে না।
mwfearnley

0

আমি পুনর্নির্দেশ stderrকরি stdoutএবং তারপরে -vআমি যে সতর্কতাটি / ত্রুটিযুক্ত স্ট্রিংটি আড়াল করতে চাই তা বাদ দিতে গ্রেপের ইনভার্ট-ম্যাচ ( ) ব্যবহার করি:

grep -r <pattern> * 2>&1 | grep -v "No such file or directory"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.