পাইপ এবং অ্যাম্পারস্যান্ডের সাহায্যে গ্রেপ ব্যবহার করে অনুসন্ধান থেকে ত্রুটিগুলি ফিল্টার করতে


22

আমি সাইগড্রাইভে একটি ফাইল সন্ধান করার জন্য সাইগউইন ব্যবহার করছি।

তবে আমাকে অনুমতি অস্বীকার করা বার্তাগুলি দমন করতে হবে (অন্যথায় ফলাফলগুলি ত্রুটির বার্তাগুলিতে লুকিয়ে আছে)। নিম্নলিখিত কমান্ডটি কাজ করে:

find -name 'myfile.*' |& grep -v "Permission denied"

আমি বুঝতে পারছি না কেন অ্যাম্পারস্যান্ডকে এই কমান্ডের মধ্যে রাখার দরকার ছিল, এটি কাজ করার আশা করেছিল তবে তা হয় না।

find -name 'myfile.*' | grep -v "Permission denied"

অ্যাম্পারস্যান্ডের অর্থটি ব্যাখ্যা করুন।

উত্তর:


24

ইউনিক্সের মতো সিস্টেমে দুটি আউটপুট পাথ রয়েছে যা অবিস্মরণিত রেখে দেওয়া থাকলে আপনার স্ক্রিনে আউটপুট প্রেরণ করবে। স্ট্যান্ডার্ড ত্রুটি (বা স্টডার) হ'ল এটি বেশিরভাগ ব্যর্থতা এবং ত্রুটির শর্তগুলি ক্যাপচার করে।

"নিয়মিত আউটপুট" হিসাবে একই আউটপুট স্ট্রিমে স্টার্ডারে অনুমতি অস্বীকৃত বার্তাটি পাস করার জন্য আপনাকে অবশ্যই দুটিটি একত্রিত করতে হবে। আপনার উদাহরণে, grep -vএটিতে সঠিকভাবে পরিচালনা করার জন্য , আপনি যে স্ট্যান্ডআউট (স্ট্যান্ডার্ড আউটপুট) এবং স্টার্ডার দেখেন তার সাথে মিলিত করুন see

থেকে গনুহ ব্যাশ ম্যানুয়াল অধ্যায় 3.2.2 পাইপলাইন :

যদি ' |&' ব্যবহার করা হয়, কমান্ড 1 এর স্ট্যান্ডার্ড ত্রুটি, এর স্ট্যান্ডার্ড আউটপুট ছাড়াও, পাইপের মাধ্যমে কমান্ড 2 এর স্ট্যান্ডার্ড ইনপুটটির সাথে সংযুক্ত থাকে ; এটা সংক্ষিপ্ত 2>&1 |। স্ট্যান্ডার্ড আউটপুটে স্ট্যান্ডার্ড ত্রুটির এই অন্তর্নিহিত পুনঃনির্দেশ কমান্ড দ্বারা নির্দিষ্ট কোনও পুনর্নির্দেশের পরে সঞ্চালিত হয়।

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

find -name 'myfile.*' 2> /dev/null

অথবা সম্ভবত

find -name 'myfile.*' 2> /tmp/errorlog

এবং মনে রাখবেন যে আপনার যদি কমান্ডের স্ট্রিং থাকে যেমন findতার আউটপুটটি পাস করার সময় xargsআপনাকে কমান্ডের সমস্ত উপাদান থেকে আউটপুট ক্যাপচার করতে কমান্ডের পুরো পাইপলাইনটি বন্ধনীতে রাখতে হবে। যেমন,

(find | egrep ^[RS].[0-9]+/.svg] | xargs head -1 )  2> /dev/null

যদি আপনি বন্ধনী ছেড়ে চলে যান এবং পরিবর্তে এটি করেন -

find | egrep ^[RS].[0-9]+/.svg] | xargs head -1 2> /dev/null

আপনি এখনও অনুসন্ধান বা egrep থেকে অনুমতি অস্বীকৃত ত্রুটি দেখতে পাবেন, তবে স্টার্ডার xargs এর জন্য পুনঃনির্দেশিত হবে।

যেমনটি আপনি দেখেছেন, আপনি সম্ভবত স্টাডারকে একটি পরীক্ষা চালানোর সময় এর সামগ্রীগুলি দেখার পরে ফেলে দেবেন।

নোট করুন যে GNU এর সাথে findএবং যতদূর আমি বলতে পারি যে কোনও POSIX- সম্মতিযুক্ত find, -printবিকল্পটি অন্তর্নিহিত। আপনি চাইলে এখনও স্পষ্টভাবে সরবরাহ করতে পারেন।


দেখে মনে হচ্ছে কেবল bash4 + wiki.bash-hackers.org/bash4#redirection
লুক

1
@ লুকাক্সটন হ্যাঁ অন্যান্য শেলগুলিতে, 2>&1 |এর জায়গায় ব্যবহার করা যেতে পারে |&(অর্থাত, স্টাডরকে স্পষ্টভাবে স্টেডারকে পুনর্নির্দেশ করতে পারে এবং তারপরে পাইপলাইনের পরবর্তী কমান্ডে পাইপ করতে পারে)।
এলিয়াহ কাগন 19

2> >( grep filter )এছাড়াও সহজ
ব্যবহারকারী 1133275


1

আপনি যদি ত্রুটি বার্তাগুলি উপেক্ষা করতে চান, কেবল স্টাডারকে / dev / null এ পুনঃনির্দেশ করুন।

find . -name 'myfile.*' -print 2>/dev/null

এছাড়াও, http://mywiki.wooledge.org/UsingFind পড়া বিবেচনা করুন ।

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