जवाबों:
जीएनयू खोजने के लिए कुछ भी नहीं बनाया गया है। आप find
स्लैश की संख्या से क्रमबद्ध आउटपुट को पोस्टप्रॉसेस कर सकते हैं , उदाहरण के लिए पर्ल के साथ:
find ... | perl -e 'print sort {$a=~s!/!/! <=> $b=~s!/!/!} <>'
<>
सभी इनपुट लाइनों की सूची है;$a =~ s!/!/!g
स्लैश की संख्या है $a
, जिसे हम सॉर्ट मानदंड के रूप में उपयोग करते हैं।यदि आप zsh का उपयोग कर सकते हैं:
echo **/*(oe\''REPLY=${REPLY//[^\/]}'\')
**/*
वर्तमान निर्देशिका और उपनिर्देशिकाओं में सभी फाइलों को सूचीबद्ध करता है।oe
उस क्रम को नियंत्रित करता है जिसमें मैचों को वापस लौटाया जाता है: वे REPLY
प्रत्येक मैच के लिए यहां उद्धरणों में कोड चलाने के बाद के मूल्य से क्रमबद्ध होते हैं, REPLY
शुरू में मिलान वाले पथ पर सेट होते हैं।$REPLY
स्लेश को छोड़कर सबकुछ डिलीट कर देता है। इसलिए परिणाम में गहराई 1 पर सब कुछ होता है (परिणामी खाली $REPLY
), फिर गहराई 2 पर सब कुछ ( $REPLY
समाप्त होता है /
), गहराई 3 ( //
), आदि।मेरी भावना यह है कि आप कर सकते हैं। इसमें grep और इस तरह के और एक लूप शामिल हैं, लेकिन मुझे लगता है कि यह बहुत अच्छी तरह से काम करता है, विशेष रूप से आपके मामले के लिए जिसे पूरा करने की आवश्यकता नहीं है।
इसकी वजह से यह अधिक संसाधन गहन है:
यह अच्छा है क्योंकि:
#! / Bin / bash गहराई = 0 जबकि मिल -mindepth $ गहराई -maxdepth $ गहराई | grep '।' कर गहराई = $ ((गहराई + 1)) किया हुआ
आप इसे आसानी से एक पंक्ति में भी फिट कर सकते हैं (?) आसानी से:
depth=0; while find -mindepth $depth -maxdepth $depth | grep --color=never '.'; do depth=$((depth + 1)); done
लेकिन मैं टाइपिंग से ज्यादा छोटी स्क्रिप्ट पसंद करता हूं ...