के संयोजन findऔर के lsलिए अच्छी तरह से काम करता है
- नई कहानियों के बिना फ़ाइल नाम
- फ़ाइलों की बहुत बड़ी मात्रा में नहीं
- बहुत लंबे फ़ाइलनाम नहीं
समाधान:
find . -name "my-pattern" -print0 |
xargs -r -0 ls -1 -t |
head -1
चलो इसे तोड़ दो:
साथ findहम इस तरह सभी दिलचस्प फ़ाइलों से मेल कर सकते हैं:
find . -name "my-pattern" ...
तब -print0हम lsइस तरह से सभी फ़ाइलनामों को सुरक्षित रूप से पास कर सकते हैं :
find . -name "my-pattern" -print0 | xargs -r -0 ls -1 -t
अतिरिक्त findखोज पैरामीटर और पैटर्न यहां जोड़े जा सकते हैं
find . -name "my-pattern" ... -print0 | xargs -r -0 ls -1 -t
ls -tसंशोधन समय (पहले नया) द्वारा फ़ाइलों को सॉर्ट करेगा और इसे एक पंक्ति में प्रिंट करेगा। आप -cसृजन समय के अनुसार क्रमबद्ध करने के लिए उपयोग कर सकते हैं । नोट : यह नए नाम वाले फ़ाइल नाम के साथ टूट जाएगा।
अंत में head -1हमें सॉर्ट की गई सूची में पहली फ़ाइल मिलती है।
नोट: xargs तर्क सूची के आकार के लिए सिस्टम सीमा का उपयोग करें। यदि यह आकार अधिक हो जाता है, xargsतो lsकई बार कॉल करेगा । यह छंटाई को तोड़ देगा और शायद अंतिम आउटपुट भी। Daud
xargs --show-limits
आप सिस्टम पर सीमा की जांच करने के लिए।
नोट 2:find . -maxdepth 1 -name "my-pattern" -print0 यदि आप सबफ़ोल्डर्स के माध्यम से फ़ाइलों को खोजना नहीं चाहते हैं तो उपयोग करें।
नोट 3: जैसा कि @starfry द्वारा बताया गया है - के लिए -rतर्क xargsरोक रहा है ls -1 -t, अगर कोई फाइल मेल नहीं खाती थी find। शुगर के लिए धन्यवाद।