निर्देशिका को बाहर निकालें


11

मैं एक पैटर्न से मेल खाने वाली प्रत्येक फ़ाइल और निर्देशिका को एक निर्देशिका को छोड़कर कैसे पा सकता हूं find?

कहो कि मेरे पास निम्न फ़ाइल संरचना है;

।
  foo-बाहर करते-मुझे /
    foo.txt
  foo-को बाहर मुझे-नहीं /
    foo.txt
  बार /
    foo.txt
    foobar /
      bar.txt
      foofoo.txt

मैं निम्नलिखित आउटपुट का उपयोग कैसे करूंगा find:

./bar/foo.txt
./bar/foobar
./bar/foobar/foofoo.txt
./foo-exclude-me-not
./foo-exclude-me-not/foo.txt

मैंने निम्नलिखित कमांड का उपयोग करने की कोशिश की है:

खोजो। -नाम 'फू-बाहर-मुझे' -प्र्यून -ओ -नाम 'फू *'
खोजो। -नाम 'फू *'! -पथ './foo-exclude-me/*'

लेकिन दोनों ने इसे लौटा दिया:

./bar/foo.txt
./bar/foobar
./bar/foobar/foofoo.txt
./foo-exclude-me # << this should be excluded
./foo-exclude-me-not
./foo-exclude-me-not/foo.txt

मैं foo-exclude-meनिर्देशिका को कैसे ठीक से बाहर कर सकता हूं ?


के foo-exclude-meबजाय का उपयोग करने का प्रयास करें ./foo-exclude-me। साथ -printही कमांड के अंत में अप्लाई करने की कोशिश करें ।
n0pe

@ मैक्समैकी परफेक्ट :)
18

यह तय किया? वह फिक्स कौन सा था जो आपके लिए काम कर रहा था? मैं इसे एक टिप्पणी के बजाय एक उत्तर में रख सकता हूं।
n0pe

@MaxMackie -printऔर foo-exclude-meइसके बजाय दोनों का उपयोग करना ./foo-exclude-me
टायिलो

बहुत बढ़िया, लग रहा है कि गिल्स ने मुझे हरा दिया, हालांकि :)
n0pe

जवाबों:


11
find . -name 'foo-exclude-me' -prune -o -name 'foo*' -print

नहीं के साथ -print, अंतर्निहित डिफ़ॉल्ट कार्रवाई हर मैच पर लागू होती है, यहां तक ​​कि छंटनी वाले भी। स्पष्ट -printकेवल निर्दिष्ट शर्तों के तहत लागू होता है, जो -name 'foo*'केवल उसी शाखा में हैं -name 'foo-exclude-me'

आम तौर पर बोलना, एक स्पष्ट उपयोग करें -printजब भी आप विधेय के संयोजन की तुलना में कुछ अधिक जटिल कर रहे हों।

आपका दूसरा प्रयास ! -path './foo-exclude-me/*'काम नहीं आया क्योंकि ./foo-exclude-meमेल नहीं खाता ./foo-exclude-me/*(कोई अनुगामी नहीं /)। जोड़ने ! -path ./foo-exclude-meसे काम चल जाएगा।


-2
-बैश-4.1 $ पाते हैं। -exec ls -l {} + -name 'a.out' -prune -o -name '*' -exec rm -f {} + -exec ls -l {} +

-rw-r - r--। 1 ओरदबा डीबीए 499 जन 18 19:30 ./a.out
-rw-r - r--। 1 ओरदबा डीबीए 499 जनवरी 18 20:59/b.out
-rw-r - r--। 1 ओरदबा डीबीए 499 जन 18 20:59/ आदि
-rw-r - r--। 1 ओरदबा डीबीए 499 जनवरी 18 20:59/d.out

।:
कुल 16
-rw-r - r--। 1 ओरदबा dba 499 जनवरी 18 19:30 a.out
-rw-r - r--। 1 ओरदबा डीबीए 499 जनवरी 18 20:59 b.out
-rw-r - r--। 1 ओरदबा डीबीए 499 जनवरी 18 20:59 c.out
-rw-r - r--। 1 ओरदबा dba 499 जन 18 20:59 d.out
rm: नहीं निकाल सकता `। ': एक निर्देशिका है
ls: एक्सेस नहीं कर सकता ।/b.out: ऐसी कोई फ़ाइल या निर्देशिका नहीं
ls: एक्सेस नहीं कर सकता। / d.out: ऐसी कोई फ़ाइल या निर्देशिका नहीं
ls: एक्सेस नहीं कर सकता ।/c.out: ऐसी कोई फ़ाइल या निर्देशिका नहीं
।:
कुल 4
-rw-r - r--। 1 ओरदबा dba 499 जनवरी 18 19:30 a.out


A.out को छोड़ने के लिए prune विकल्प का उपयोग किया और ठीक काम करता है - art.s
user211226

आप बिल्कुल स्पष्ट नहीं करते कि -pruneप्रासंगिक क्यों है। ' -prunefind-print
डिसेबल

-प्रत्यक्ष सत्य; यदि फ़ाइल एक निर्देशिका है, तो उसमें न उतरें। - तो यह एक सुरक्षा के रूप में निर्देशिकाओं में ही काम नहीं करेगा। - art.s
user211226
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.