जवाबों:
जीएनयू खोजने के लिए कुछ भी नहीं बनाया गया है। आप 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
लेकिन मैं टाइपिंग से ज्यादा छोटी स्क्रिप्ट पसंद करता हूं ...