Grep सम्मान नहीं --exclude-dir


12

मुझे /varएक हैंग के कारण खोज करने में परेशानी हो रही है /var/run। मैंने बाहर/var/run करने की कोशिश की , लेकिन इसके अपेक्षित परिणाम नहीं आ रहे हैं:

$ sudo grep -IR --exclude-dir="/var/run" '45.78.157.165' /var | egrep -v '(audit|access)'
/var/log/secure:Jun 21 14:08:34 cryptopp sshd[19729]: error: Received disconnect from 199.91.135.157: 3: com.jcraft.jsch.JSchException: reject HostKey: 45.78.157.165 [preauth]
/var/log/secure-20160626:Jun 21 14:08:34 cryptopp sshd[19729]: error: Received disconnect from 199.91.135.157: 3: com.jcraft.jsch.JSchException: reject HostKey: 45.78.157.165 [preauth]
/var/log/secure-20160626:Jun 21 14:08:34 cryptopp sshd[19729]: error: Received disconnect from 199.91.135.157: 3: com.jcraft.jsch.JSchException: reject HostKey: 45.78.157.165 [preauth]
grep: /var/run/saslauthd/mux: No such device or address
grep: /var/run/dbus/system_bus_socket: No such device or address
grep: /var/run/rpcbind.sock: No such device or address
grep: /var/run/udev/control: No such device or address

मैंने कोशिश की है -exclude-dir=/var/runऔर दोनों -exclude-dir="/var/run"। दोनों एक ही परिणाम उत्पन्न करते हैं।

मेरा जीआरपी फेल क्यों हो रहा है?

मैं /var/runएक पुनरावर्ती grep से कैसे बाहर करूं ?


CentOS 7.2, ग्रेप के साथ:

$ grep --version
grep (GNU grep) 2.20
Copyright (C) 2014 Free Software Foundation, Inc.

1
क्या आपने इसे --exclude-dir=/var/runबिना उद्धरणों के साथ आज़माया है?
जेकगॉल्ड जूल

@ जेकगोल्ड - हाँ; दोनों के साथ और बिना। मुझे उस प्रश्न के साथ जोड़ा जाए।
jww

@JakeGould इससे कोई फर्क नहीं पड़ता: grepप्रक्रिया किसी भी मामले में उद्धरण नहीं देखती है। बैश उन्हें फैलता है, और प्रदर्शन करने के लिए कोई प्रतिस्थापन नहीं है, इसलिए उन्हें बस हटा दिया जाता है। यह सभी गोले के लिए मामला है, जिनके बारे में मुझे पता है।
व्रचिन

जवाबों:


18

मुझे लगता है कि यह शायद इसलिए है क्योंकि आप स्पष्ट रूप grepसे पुनरावर्ती से खोज करने के लिए कह रहे हैं /var, और /var/runइसके तहत एक उप-मिलान से मेल नहीं खाता है /var

Grep मैन पेज देखें, जिसमें लिखा है:

--exclude-dir=glob
    [..] skip any subdirectory whose base name matches glob.  [..]

ठीक कर

इसलिए, अपनी कमांड को ठीक करने के लिए, बाहर किए गए पैटर्न को बदलें, अर्थात:

sudo grep -IR --exclude-dir="run" '45.78.157.165' /var | egrep -v '(audit|access)'

मेरा भी ऐसा ही सवाल है। आप grep -r --exclude-dir=./root/js sometext .वर्तमान स्थान से सबफ़ोल्डर को बाहर करने के लिए कैसे बदलेंगे ?
Psynnott

3
यकीन नहीं है कि /कुछ भी करते हैं। grep प्रत्येक फ़ोल्डर में जाता है और उस बिंदु पर खोज शुरू करता है। यह प्रभावी रूप से हमेशा वर्तमान फ़ोल्डर खोज रहा है। यदि आप एक उप-फ़ोल्डर (जैसे /home/me/dev/project1/js) को बाहर करना चाहते हैं और आप कई फ़ोल्डरों को खोज रहे हैं (उदाहरण के लिए शुरू /home/me), तो आपको एक आधार फ़ोल्डर नाम निर्दिष्ट करना होगा जिसे आप बाहर करना चाहते हैं (जैसे --exclude-dir=js)। दुर्भाग्य से, यह समान नाम के किसी भी उप-फ़ोल्डर को छोड़कर, पदानुक्रम में कहीं और होगा। यदि आप अधिक नियंत्रण के साथ कुछ चाहते हैं, तो आप के findसाथ उपयोग करने की कोशिश कर सकते हैं grep
जेहाद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.