आप खोजने की जीएनयू संस्करण है, तो यह प्रयास करें:
find test -type f -printf '%h\0%d\0%p\n' | sort -t '\0' -n | awk -F '\0' '{print $3}'
एक पाश में इन फ़ाइल नामों का उपयोग करने के लिए, प्रत्येक फ़ाइल के लिए
find test -type f -printf '%h\0%d\0%p\n' | sort -t '\0' -n | awk -F '\0' '{print $3}' | while read file; do
# use $file
done
खोजने आदेश प्रिंट तीन बातें करते हैं: (1) इसकी निर्देशिका, (2) निर्देशिका पेड़ में इसकी गहराई, और (3) इसका पूरा नाम। आउटपुट में गहराई को शामिल करके हम sort -n
test/file
test/a/file
से ऊपर क्रमबद्ध करने के लिए उपयोग कर सकते हैं। अंत में हम पहले दो कॉलम को बाहर करने के लिए awk
का उपयोग करते हैं क्योंकि इन्हें केवल सॉर्ट करने के लिए उपयोग किया जाता था।
तीन क्षेत्रों के बीच विभाजक के रूप में \0
का उपयोग करके हम उन्हें रिक्त स्थान और टैब के साथ फ़ाइल नामों को संभालने की अनुमति देते हैं (लेकिन दुर्भाग्य से न्यूलाइन नहीं)।
$ find test -type f
test/b/file
test/a/file
test/file
test/z/file
$ find test -type f -printf '%h\0%d\0%p\n' | sort -t '\0' -n | awk -F'\0' '{print $3}'
test/file
test/a/file
test/b/file
test/z/file
आप find
आदेश को संशोधित करने में असमर्थ हैं, तो यह जटिल प्रतिस्थापन की कोशिश:
find test -type f | while read file; do
printf '%s\0%s\0%s\n' "${file%/*}" "$(tr -dc/<<< "$file")" "$file"
done | sort -t '\0' | awk -F'\0' '{print $3}'
यह एक ही बात करता है, ${file%/*}
के साथ एक फ़ाइल की निर्देशिका नाम पाने के लिए इस्तेमाल किया जा रहा है और tr
आदेश स्लेश की संख्या को गिनने के लिए उपयोग किया जा रहा है, जो कि फ़ाइल की "गहराई" के बराबर है।
(मुझे यकीन है कि वहाँ एक आसान जवाब वहाँ बाहर है उम्मीद है। क्या आप पूछ रहे हैं कि कठिन प्रतीत होता है, लेकिन मैं एक सरल समाधान पर रिक्त कर रहा हूँ।)
स्रोत
2013-01-23 23:12:28
मैं इस बैकअप स्क्रिप्ट के हिस्से के रूप में इस कमांड का उपयोग कर रहा हूं। अधिमानतः मैं उम्मीद कर रहा था कि मैं फाइल के लिए 'के साथ कुछ कर सकता हूं ... | क्रमबद्ध करें ... ' – Ken
@ केन मेरा संपादन देखें। 'ढूंढें ... | जबकि फाइल को पढ़ने के लिए 'फ़ाइल में' को प्राथमिकता दी जानी चाहिए (ढूंढें ...) '। उत्तरार्द्ध व्हाइटस्पेस-सुरक्षित नहीं है, धीमा है, और कमांड लाइन पर फिट होने के लिए बहुत सारे फ़ाइल नाम होने पर त्रुटि हो सकती है। –