संपादित करें: मुझे लगता है कि यह पोस्ट 'विशेष रूप से उपयोगी नहीं है' जैसा कि मैंने सोचा था कि यह था। यह वास्तव में तेज़ समाधान है जो अभी हाल ही में संशोधित फ़ाइल (फ़ाइलों की पूरी सूची को सॉर्ट करने के बजाय) का ट्रैक रखता है:
find . -type f -printf '%T@ %p\n' | awk 'BEGIN { mostrecenttime = 0; mostrecentline = "nothing"; } { if ($1 > mostrecenttime) { mostrecenttime = $1; mostrecentline = $0; } } END { print mostrecentline; }' | cut -f2- -d ' '
स्पष्टता के लिए कई लाइनों में फैला हुआ यह निम्नानुसार है:
find . -type f -printf '%T@ %p\n' | awk '
BEGIN { mostrecenttime = 0; mostrecentline = "nothing"; }
{
if ($1 > mostrecenttime)
{ mostrecenttime = $1; mostrecentline = $0; }
}
END { print mostrecentline; }' | cut -f2- -d ' '
EDIT का अंत
विशेष रूप से उपयोगी पोस्ट नहीं, लेकिन चूंकि 'व्यवस्था' गति पर चर्चा कर रही थी, मैंने सोचा कि मैं इसे साझा करूंगा।
अरेंजमेंट और एनज़ोटिब के सॉल्यूशंस में डायरेक्टरी के अंदर मौजूद सभी फाइलों को उनके mtimes के साथ सूचीबद्ध करना और फिर छांटना शामिल है। जैसा कि आप जानते हैं कि अधिकतम खोजने के लिए छंटाई आवश्यक नहीं है। अधिकतम ढूँढना रेखीय समय में किया जा सकता है लेकिन छँटाई में n लॉग (n) समय लगता है [मुझे पता है कि अंतर बहुत अधिक नहीं है, लेकिन फिर भी।)] मैं इसे लागू करने का एक साफ तरीका नहीं सोच सकता। [संपादित करें: एक साफ-सुथरी (जो गंदी दिख रही है) और ऊपर प्रदान किया गया तेज़ कार्यान्वयन।]
अगली सबसे अच्छी बात - एक निर्देशिका में सबसे हाल ही में संपादित फ़ाइल को खोजने के लिए, प्रत्येक स्तर 1 उपनिर्देशिका में सबसे हाल ही में संपादित की गई फ़ाइल को पुन: प्राप्त करें। इस फ़ाइल को उपनिर्देशिका का प्रतिनिधित्व करते हैं। अब स्तर 1 फाइलों को स्तर 1 उपनिर्देशिकाओं के प्रतिनिधियों के साथ क्रमबद्ध करें। यदि प्रत्येक निर्देशिका की स्तर 1 फ़ाइलों और उप-डायरियों की संख्या लगभग एक स्थिर है, तो इस प्रक्रिया को कुल फ़ाइलों की संख्या के साथ रैखिक रूप से स्केल करना चाहिए।
इसे लागू करने के लिए मैं आया हूं:
findrecent() { { find "$1" -maxdepth 1 -type f -exec stat -c "%y %n" {} + | sort -r | head -1 && find "$1" -mindepth 1 -maxdepth 1 -type d -exec findrecent {} \;; } | sort -r | head -1; }
findrecent .
मैंने इसे चलाया और find: findrecent: No such file or directory
त्रुटियों का एक गुच्छा मिला । कारण: -एक अलग शेल में खोज का रन। मैंने .bashrc, .xsessionrc में खोजक को परिभाषित करने की कोशिश की, लेकिन इनसे मदद नहीं मिली [मैं यहाँ मदद की सराहना करूँगा]। अंत में मैंने डालने का सहारा लिया
#!/bin/bash
{ find "$1" -maxdepth 1 -type f -exec stat -c "%y %n" {} + | sort -r | head -1 && find "$1" -mindepth 1 -maxdepth 1 -type d -exec findrecent {} \;; } | sort -r | head -1;
एक स्क्रिप्ट findrecent
में मेरे पेट में कहा जाता है और फिर इसे चला रहा है।
मैंने इसे चलाया, बिना किसी आउटपुट के इंतजार और इंतजार करता रहा। बस मुझे यकीन है कि मैं किसी भी अनंत छोरों के साथ काम नहीं कर रहा था, मैंने फ़ाइल को संशोधित किया
#!/bin/bash
echo "$1" >&2
{ find "$1" -maxdepth 1 -type f -exec stat -c "%y %n" {} + | sort -r | head -1 && find "$1" -mindepth 1 -maxdepth 1 -type d -exec findrecent {} \;; } | sort -r | head -1;
और फिर से कोशिश की। इसने काम तो किया - लेकिन मेरे होम-फोल्डर पर 1 मिनट 35 सेकेंड का समय लगा - अरेंजमेंट और एनज़ोटिब के समाधान में क्रमशः 1.69, 1.30 सेकंड का समय लगा!
O (n) की श्रेष्ठता O (n लॉग (n)) के लिए बहुत कुछ! धिक्कार है आप कॉल ओवरहेड को काम करते हैं! [या बल्कि स्क्रिप्ट कॉल ओवरहेड]
लेकिन यह स्क्रिप्ट पहले के समाधानों की तुलना में बेहतर है और मुझे यकीन है कि यह Google के मेमोरी बैंक की तुलना में उनके मुकाबले अधिक तेजी से चलेगा