जवाबों:
find . ! -path . -type d
इस विशेष मामले ( .
) के लिए, गोल्फ mindepth
समाधान (24 बनाम 26 वर्ण) से बेहतर है , हालांकि यह संभवत: टाइप करने के लिए थोड़ा कठिन है !
।
अन्य निर्देशिकाओं को बाहर करने के लिए, यह कम अच्छी तरह से गोल्फ करेगा और DRYness के लिए एक चर की आवश्यकता होगी:
D="long_name"
find "$D" ! -path "$D" -type d
मेरे बीच का फैसला पेड़ !
और -mindepth
:
!
पोर्टेबिलिटी के लिए उपयोग करें ।.
? एक सिक्का फेंक दो।long_name
? का उपयोग करें -mindepth
।find / ! -regex '/\(a\|b\)/.*'
या अधिक बस, grep के माध्यम से पाइप। पुनरावृत्ति न करने के लिए, उपरोक्त बहुत ही अक्षम होगा और आपको इसका उपयोग करना चाहिए -prune
: stackoverflow.com/questions/1489277/…
find
के साथ grep
निर्देशिका बाहर करने के लिए, लेकिन मूल निर्देशिका अभी भी मौजूद था, जिससे सब कुछ वैसे भी हटाए जाने के लिए।
find
, आपको उपसर्गों के लिए जाँच करने की आवश्यकता होगी: stackoverflow.com/questions/17959317/… लेकिन लूप के लिए एक बैश इसे संभाल सकता है :-)
\!
) को सुरक्षित पक्ष में होने से बचना चाहते हैं । मेरी मशीन के सभी उदाहरण man find
बच गए हैं इसलिए ऐसा लगता है कि यह शायद एक अच्छा विचार है। संपादित करें - बस ध्यान से यह भी स्पष्ट रूप से कहते हैं:! expr True if expr is false. This character will also usually need protection from interpretation by the shell.
न केवल पैरामीटर find
द्वारा पुनरावृत्ति की गहराई को नियंत्रित किया जा सकता है -maxdepth
, इसी -mindepth
पैरामीटर का उपयोग करके गहराई को "शीर्ष" से भी सीमित किया जा सकता है । तो क्या वास्तव में एक की जरूरत है:
find . -mindepth 1 -type d
find . -mindepth 1 -maxdepth 1 -type d ...
मैं का उपयोग करें find ./* <...>
जब मैं प्रथम स्तर dotfiles (अनदेखी कोई आपत्ति नहीं है *
ग्लोब बैश में डिफ़ॉल्ट रूप से इन से मेल नहीं खाता - shopt निर्मित में 'dotglob' विकल्प देखें: https://www.gnu.org/software/bash /manual/html_node/The-hop-Builtin.html )।
ग्रहण tmp # पाएं। । ./screen ./screen/.testfile2 ./.X11-unix ./.ICE-unix ./tmux-0 ./tmux-0/default
ग्रहण tmp # खोजें ।/ \ _ ./screen ./screen/.testfile2 ./tmux-0 ./tmux-0/default
-exec
विकल्प के साथ इस चाल का उपयोग न करें । उदाहरण के लिए, यदि आप प्रयास करते हैं, तो आपको find dir/* -type d -exec rmdir {} \;
त्रुटियाँ दिखाई देंगी।
rmdir
रहे हैं और सबसे अधिक संभावना है कि आपको बता रहे हैं कि निर्देशिका खाली नहीं है क्योंकि निर्देशिका में find
गहराई से पहली खोज करेंगे, माता-पिता को अपने बच्चों से पहले दिखाते हुए।
खैर, एक सरल समाधान के रूप में अच्छी तरह से (समाधान मेरे लिए काम नहीं कर रहा था git bash)
find * -type d
यह बहुत अच्छा प्रदर्शन नहीं हो सकता है, लेकिन काम हो जाता है, और यह वही है जो हमें कभी-कभी चाहिए।
[संपादित करें]: जैसा कि @AlexanderMills ने टिप्पणी की है कि यह मूल स्थान (जैसे ./.hidden
) में छिपी हुई निर्देशिकाओं को नहीं दिखाएगा , लेकिन यह छिपी हुई उपनिर्देशिकाएँ (जैसे। ./folder/.hiddenSub
) दिखाएगा । [खिड़कियों पर गिट बैश के साथ परीक्षण]
find /path/ ! -path "/path/first" ! -path "/path/second"
क्या यह एकमात्र तरीका है?