2012-06-29 12 views
10

में फ़ाइल समय द्वारा क्रमबद्ध फ़ाइलों की बड़ी सूची प्राप्त करें, मुझे पता है कि मेरी फाइल सिस्टम फ़ाइल संशोधन समय को मिलीसेकंड में संग्रहीत कर रहा है लेकिन मुझे PHP के माध्यम से उस जानकारी तक पहुंचने का कोई तरीका नहीं पता है। मैं यह देख जब मैं एक ls --full-time कार्य करें:* मिलीसेकंड *

-rw-r--r-- 1 nobody nobody 900 2012-06-29 14:08:37.047666435 -0700 file1 
-rw-r--r-- 1 nobody nobody 900 2012-06-29 14:08:37.163667038 -0700 file2 

मैं यह सोचते हैं रहा है कि डॉट के बाद संख्या मिलीसेकेंड हैं।

तो मुझे लगता है मैं सिर्फ ls इस्तेमाल कर सकते हैं और, संशोधन समय से तरह यह है इस तरह:

$filelist = `ls -t`; 

हालांकि, निर्देशिका कभी कभी फ़ाइलों की एक विशाल संख्या है और मैंने देखा है कि ls हो सकता है उन परिस्थितियों में बहुत धीमी है।

तो इसके बजाय, मैं find का उपयोग कर रहा हूं लेकिन इसमें संशोधन समय के परिणाम क्रमबद्ध करने के लिए कोई स्विच नहीं है। जाहिर है, इस तरह की मिलीसेकेंड तो फ़ाइलें एक ही दूसरे में बनाया गया है कि कभी कभी गलत क्रम में सूचीबद्ध हैं करने के लिए नीचे नहीं है

$filelist = `find $dir -type f -printf "%[email protected] %p\n" | sort -n | awk '{print $2}'`; 

और,: यहाँ अब मैं क्या कर रहा हूँ का एक उदाहरण है।

+1

'sort -n' मिलीसेकंड को सॉर्ट क्यों नहीं करता है? मुझे लगता है कि दो टाइमस्टैम्प '1341013506.3000000000' और' 1341013506.6000000000' संख्यात्मक रूप से अभी भी क्रमबद्ध नहीं किया जाएगा? मैं दोहराना नहीं कर सकता क्योंकि मेरी मशीन एमएस फ़ाइल समय स्टोर नहीं करती है :) –

+1

@mattedgod: अपनी '/ sys /' निर्देशिका की जांच करें; मेरे सिस्टम पर, यह नैनोसेकंद के समय का समर्थन करता है। – sarnold

+0

@ कर्नाल्ड हम्म जो अजीब है, sys निर्देशिका नैनोसेकंड में है लेकिन अधिकांश दस्तावेज़ निर्देशिका नहीं हैं। दिलचस्प ... –

उत्तर

6

केवल कुछ फाइल सिस्टम (जैसे EXT4) वास्तव में इन बार नैनोसेकंद परिशुद्धता तक स्टोर करते हैं। यह कुछ अन्य फाइल सिस्टम (जैसे EXT3) पर उपलब्ध होने की गारंटी नहीं है, आप देखेंगे कि आंशिक भाग .000000000

अब, यदि यह सुविधा आपके लिए वास्तव में महत्वपूर्ण है, तो आप एक विशेष PHP एक्सटेंशन लिख सकते हैं। यह बाहरी उपयोगिताओं को कॉल बाईपास करेगा और तेजी से एक बड़ा सौदा होना चाहिए। एक्सटेंशन बनाने की प्रक्रिया को कई स्थानों पर अच्छी तरह से समझाया गया है, जैसे here। इस तरह के एक्सटेंशन के लिए एक उचित दृष्टिकोण एक वैकल्पिक fstat फ़ंक्शन कार्यान्वयन हो सकता है जो आजकल /usr/include/bits/stat.h में परिभाषित स्टेट स्ट्रक्चर में उपलब्ध उच्च परिशुद्धता फ़ील्ड का खुलासा करता है।

सामान्य रूप से, कुछ भी मुफ्त नहीं है। इस एक्सटेंशन को बनाए रखना होगा, होस्टेड वातावरण आदि पर इसे चलाने के लिए संभवतः संभव नहीं है। इसके अलावा, आपका PHP समाधान केवल उन सर्वरों पर चलाया जाएगा जहां आपका एक्सटेंशन तैनात किया गया था (हालांकि यह एलएस आधारित तकनीक पर वापस गिरकर बाधित हो सकता है अगर एक्सटेंशन का पता नहीं चला है)।

+0

द्वारा मुझे यह महसूस होता था कि इसका कोई आसान समाधान नहीं होगा। अपने विचार साझा करने के लिए धन्यवाद। :-) – Jeremy

संबंधित मुद्दे