hek2mgl's answer समस्या को अच्छी तरह से बताता है और उसका समाधान अच्छी तरह से काम करता है; यह उत्तर प्रदर्शन पर दिखता है।
स्वीकृत उत्तर एक छोटा धीमा है, क्योंकि यह प्रत्येक इनपुट लाइन के लिए bash
प्रक्रिया बनाता है। जबकि
xargs
कारण है कि शेल कार्यक्षमता प्रत्येक चरण में की जरूरत है आम तौर पर के लिए बेहतर और एक खोल-कोड पाश की तुलना में तेजी है, इस विशेष मामले में भूमिकाओं उलट कर रहे हैं,।
निम्नलिखित वैकल्पिक समाधान इनपुट लाइनों प्रक्रिया पूरी होने में while
पाश का उपयोग करता है, और, मेरे मशीन पर, के बारे में दोगुनी गति सेxargs
समाधान के रूप में है।
find . -printf "%P\n" | sort | while IFS= read -r f; do echo "$(uuid) $f"; done
आप एम्बेडेड नई-पंक्तियों (कम ही है) के साथ फ़ाइल नामों को लेकर चिंतित हैं और जीएनयू उपयोगिताओं का उपयोग करते हैं, तो आप विभाजक के रूप में NUL बाइट्स इस्तेमाल कर सकते हैं:
find . -printf "%P\0" | sort -z | while IFS= read -d '' -r f; do echo "$(uuid) $f"; done
अद्यतन: सबसे तेज़ दृष्टिकोण एक शेल लूप का उपयोग नहीं करना है, जैसा कि ᴳᵁᴵᴰᴼ's clever answer से प्रमाणित है। उसके उत्तर के पोर्टेबल संस्करण के लिए नीचे देखें।
संगतता ध्यान दें:
ओपी के find
आदेश के उपयोग जीएनयूfind
(लिनक्स) का अर्थ है, और सुविधाओं (-printf
) का उपयोग करता है और प्लेटफार्म पर काम न करें।
यहाँ ᴳᵁᴵᴰᴼ's answerfind
(और awk
) का केवल POSIX अनुरूप सुविधाओं का उपयोग करता है की एक पोर्टेबल संस्करण है।
नोट, हालांकि, uuid
एक पॉज़िक्स उपयोगिता नहीं है; के बाद से Linux और BSD जैसी प्रणालियों (सहित OSX) एक uuidgen
उपयोगिता है, तो कमांड का उपयोग करता है बजाय कि:
find . -exec printf '%s\t' {} \; -exec uuidgen \; |
awk -F '\t' '{ sub(/.+\//,"", $1); print $2, $1 }' | sort -k2
@TomFenech: '-n 1' वास्तव में किसी भी खाली स्थान के आधार पर विभाजित हैं, चाहे लाइन आंतरिक या नहीं, तो आदेश एम्बेडेड व्हाइटस्पेस के साथ पथ के साथ तोड़ देगा; '-L 1' इरादे के करीब आता है, जिसमें यह लाइन-बाय-लाइन प्रोसेसिंग करता है, लेकिन प्रत्येक पंक्ति पर शब्द-विभाजन अभी भी लागू होता है, ताकि संभावित रूप से _multiple_ तर्क प्रति इनपुट लाइन 'echo'' (जो हो सकता है) या समस्या का कारण नहीं हो सकता है)। मजबूत दृष्टिकोण '-I' का उपयोग स्वीकार किए गए उत्तर में करना है। – mklement0