2013-04-30 11 views
18

से अधिक संख्याओं के लिए Grep लाइनें मैं किसी दिए गए नंबर से अधिक आउटपुट के पहले फ़ील्ड में लाइनों के लिए grep करने की कोशिश कर रहा हूं। इस उदाहरण में, वह संख्या 755 है। आखिरकार, मैं जो कर रहा हूं वह stat -c '%a %n' * का उपयोग कर 755 से अधिक विशेषाधिकारों के साथ (और बराबर नहीं) प्रत्येक फ़ाइल को सूचीबद्ध करने का प्रयास कर रहा है और फिर इस अंतिम सूची को प्राप्त करने के लिए कुछ grep'ing (या संभवतः seding?) पर पाइप करें। कोई विचार यह कैसे पूरा किया जा सकता है?दिए गए नंबर

+2

चूंकि '755' वास्तव में एक ऑक्टल संख्या बिट्स के अनुक्रम का प्रतिनिधित्व करता है, वास्तव में" से अधिक "का क्या अर्थ है? '666' सभी को पहुंच लिखने देता है; क्या यह "755' से अधिक" है? '755'" '666' से अधिक" है? –

+0

ओएस एक्स उपयोगकर्ता: 'stat -c '% के बराबर% n' *' (लिनक्स) 'stat -f '% lp% n' *' – mklement0

+0

प्रतीत होता है कि व्यक्ति grep के लिए पूछ रहा है, जबकि लोग अभी भी दे रहे हैं awk? – Soncire

उत्तर

20

कोशिश यह:

stat -c '%a %n' *|awk '$1>755' 

अगर आप सिर्फ अपने अंतिम उत्पादन में फ़ाइल नाम चाहते हैं, विशेषाधिकार संख्या को छोड़ आप:

stat -c '%a %n' *|awk '$1>755{print $2}' 

संपादित

वास्तव में आप कर सकते थे अजीब के भीतर chmod करें। लेकिन आपको यह सुनिश्चित करना चाहिए कि उपयोगकर्ता को अजीब रेखा को निष्पादित करने के लिए उन फ़ाइलों को बदलने की अनुमति है।

stat -c '%a %n' *|awk '$1>755{system("chmod 755 "$2)}' 

फिर से, मान लें कि फ़ाइल नाम में कोई स्थान नहीं है।

+0

ओह उस छोटे ऐड-ऑन के लिए धन्यवाद। मैं सिर्फ फील्ड 2 काटने जा रहा था, लेकिन आपका एक कम पाइप में इसे पूरा करता है! – user2150250

+0

रिक्त स्थान के साथ फ़ाइल नामों के लिए देखें। –

+1

@ user2150250 नोट, मेरा दूसरा अजीब एक-लाइनर मानता है कि आपके फ़ाइल नाम में कोई स्थान नहीं है। – Kent

5

मैं awk(1) का उपयोग करेंगे:

stat -c '%a %n' * | awk '$1 > 755' 

awk पैटर्न लाइनों से मेल खाता है, जहां पहले क्षेत्र में अधिक से अधिक तो 755 आप एक कार्रवाई जोड़ सकता है अगर आप एक लाइन या कुछ और के एक सबसेट प्रिंट करना चाहते है, भी (@ केंट का जवाब देखें)।

3

न तो grep और न ही sed अंकगणित में अच्छे हैं। awk मदद कर सकता है (दुर्भाग्य से मुझे यह नहीं पता)। लेकिन ध्यान दें कि find काम यहाँ भी हो सकता है,:

-perm mode 
      File's permission bits are exactly mode (octal or symbolic). 
      Since an exact match is required, if you want to use this form 
      for symbolic modes, you may have to specify a rather complex 
      mode string. For example -perm g=w will only match files which 
      have mode 0020 (that is, ones for which group write permission 
      is the only permission set). It is more likely that you will 
      want to use the `/' or `-' forms, for example -perm -g=w, which 
      matches any file with group write permission. See the EXAMPLES 
      section for some illustrative examples. 

    -perm -mode 
      All of the permission bits mode are set for the file. Symbolic 
      modes are accepted in this form, and this is usually the way in 
      which would want to use them. You must specify `u', `g' or `o' 
      if you use a symbolic mode. See the EXAMPLES section for some 
      illustrative examples. 

    -perm /mode 
      Any of the permission bits mode are set for the file. Symbolic 
      modes are accepted in this form. You must specify `u', `g' or 
      `o' if you use a symbolic mode. See the EXAMPLES section for 
      some illustrative examples. If no permission bits in mode are 
      set, this test matches any file (the idea here is to be consis‐ 
      tent with the behaviour of -perm -000). 

तो क्या आप के लिए काम कर सकता है:

find . -perm -755 -printf '%m %p\n' 

बस -printf हिस्से को हटाने अगर आप केवल फ़ाइल नाम की जरूरत है।

संबंधित मुद्दे