Ubuntu grep, आदि का पता लगाएं: "अनुमति से इनकार" और "ऐसी कोई फ़ाइल या निर्देशिका" आउटपुट नहीं


17

जब मैं उपयोग करता हूं grepया find, मैं हमेशा "अनुमति से वंचित" और "ऐसी कोई फ़ाइल या निर्देशिका" नोटिस, कुछ इस तरह से परेशान हो जाता हूं:

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn
grep: ./lib/ufw/user6.rules: Permission denied
grep: ./lib/ufw/user.rules: Permission denied
grep: ./lib/init/rw/udev/watch/27: No such file or directory
grep: ./lib/init/rw/udev/watch/26: No such file or directory
grep: ./lib/init/rw/udev/watch/25: No such file or directory

मैं उन्हें कैसे टाल सकता हूं और इसे बना सकता हूं इसलिए मैं केवल प्रासंगिक डेटा देख सकता हूं, यानी ऐसा कुछ जिसे मैं वास्तव में देख रहा हूं?


जवाबों:


24

grep के साथ आप -s ध्वज को निर्दिष्ट कर सकते हैं जो @ortang ने बहुत कुछ कहा है

-s, --no- संदेश कोई भी या अनुपयोगी फ़ाइलों के बारे में त्रुटि संदेशों को दबाएं। पोर्टेबिलिटी नोट: GNU grep के विपरीत, 7th संस्करण Unix grep POSIX के अनुरूप नहीं था, क्योंकि इसमें -q का अभाव था और इसका विकल्प GNU grep -q विकल्प की तरह व्यवहार करता था। USG- शैली grep में -q का भी अभाव है, लेकिन इसका विकल्प GNU grep की तरह व्यवहार करता है। पोर्टेबल शेल स्क्रिप्ट को -q और -s दोनों से बचना चाहिए और इसके बजाय मानक / त्रुटि आउटपुट को / dev / null में रीडायरेक्ट करना चाहिए।

जहाँ तक मुझे पता है @ortangs का जवाब सबसे अच्छा है। कुछ इस तरह

find / -name "myfile" -type f -print 2>/dev/null


6

पर पुनर्निर्देशित stderrकरने का प्रयास करें /dev/null

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn

5

(उर्फ ) के strerrलिए पुनर्निर्देशन अनुमति से वंचित त्रुटियों को दबाने का एक अच्छा तरीका है।/dev/nullblack hole

हालांकि, ध्यान दें कि यह घाव न केवल permission deniedसंदेशों को दबाता है, बल्कि सभी त्रुटि संदेश भी है।

यदि आप इसके अलावा अन्य त्रुटि संदेशों को बनाए रखना चाहते हैं, permission deniedतो आप ऐसा कुछ कर सकते हैं -

grep -rnP 'YII_CORE_PATH' ./ 2>&1 | grep -v 'permission denied' > error.log

यदि आप उन्हें बरकरार नहीं रखना चाहते हैं तो निम्नलिखित ठीक रहेगा -

grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn

1
आप कुछ ऐसा नहीं कर सकते जो पहले से ही / dev / null में रीडायरेक्ट हो गया हो।
कोरोबा

@choroba ने जवाब सही दिया है। पहले सुझाव के 2>&1बदले लिखने का मतलब 2> /dev/null
जयपाल सिंह

हां, आपको पहले रीडायरेक्ट stderrकरना होगा stout
१ang

3
johndoe@johndoe-desktop:/$ sudo grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn

sudoप्रशासनिक विशेषाधिकारों के लिए कमांड को ऊपर उठाने के लिए कमांड का उपयोग करें ।


0

Grep -v से पहले "| &" का उपयोग करके इससे निपटेंगे, उदा

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.