2011-01-23 13 views
21

मुझे यह पता लगाने के लिए find myfile.txt -mtime +5 करने में सक्षम होने के बारे में अच्छी तरह से पता है कि मेरी फ़ाइल 5 दिनों से अधिक पुरानी है या नहीं। हालांकि मैं myfile.txt के दिनों में mtime लाने और इसे आगे के उपयोग के लिए एक चर में संग्रहीत करना चाहता हूं। मुझे यह कैसे करना है?बाश - विशिष्ट फ़ाइल का mtime प्राप्त करें?

उत्तर

43

stat आपको लगता है कि जानकारी देने के कर सकते हैं:

filemtime=`stat -c %Y myfile.txt` 

%Y आप के रूप में "युग के बाद से सेकंड" अंतिम संशोधन देता है, लेकिन वहाँ अन्य विकल्पों में से बहुत सारे हैं; more info। इसलिए यदि फ़ाइल को 2011-01-22 को 15:30 GMT पर संशोधित किया गया था, तो उपर्युक्त 1295710237 के क्षेत्र में एक संख्या वापस कर देगा।

संपादित करें: आह, आप इसे संशोधित होने के दिनों में समय चाहते हैं । यह अधिक जटिल होने जा रहा है, कम से कम नहीं क्योंकि "दिन" निश्चित अवधि नहीं है (कुछ "दिनों" में केवल 23 घंटे हैं, अन्य 25   — डेलाइट बचत समय के लिए धन्यवाद)।

अनुभवहीन संस्करण इस प्रकार दिखाई देंगे:

filemtime=`stat -c %Y $1` 
currtime=`date +%s` 
diff=$(((currtime - filemtime)/86400)) 
echo $diff 

... लेकिन फिर, कि एक दिन यह सोचते है हमेशा बिल्कुल 86,400 दूसरा लंबा है।

बैश here में गणित के बारे में अधिक जानकारी।

+0

वह मीठा था, दुर्भाग्य से मैंने खुद को मूर्ख बना दिया और भूल गया कि मुझे दिनों में मातृ युग की आवश्यकता है। क्या यह संभव है? – Industrial

+0

@ इंडस्ट्रियल: एक बार आपके पास मूल्य होने के बाद, आप उस पर गणित कर सकते हैं। मैं आपका मतलब "... दिनों में मातृ युग" का पालन नहीं करता हूं। (कब से दिन? तुम्हारा मतलब है, कितने दिन पहले इसे संशोधित किया गया था?) –

+0

दिनों के बारे में हिस्सा मिस गया, +1 +1 – Anders

2

क्या यह जवाब है? स्टेट सहायता

stat --help 
Usage: stat [OPTION]... FILE... 
Display file or file system status. 
[...] 
-c --format=FORMAT use the specified FORMAT instead of the default; 
         output a newline after each use of FORMAT 
[...] 
The valid format sequences for files 
[...] 
    %y Time of last modification, human-readable 
    %Y Time of last modification, seconds since Epoch 
[...] 
3
AGE=$(perl -e 'print -M $ARGV[0]' $file) 

, दिनों में $ फ़ाइल की उम्र तक $ आयु सेट हो जाएगा के रूप में पर्ल के -M ऑपरेटर आप के लिए दिनों के लिए stat कॉल और रूपांतरण संभालती पर

A=$(stat -c "%y" myfile.txt) 

नज़र ।

वापसी मूल्य एक फ़्लोटिंग-पॉइंट मान है (उदाहरण के लिए, 6.62849537 दिन)। एक int अभिव्यक्ति में जोड़े यदि आप एक पूर्णांक परिणाम

AGE=$(perl -e 'print int -M $ARGV[0]' $file) 

रूबी और पायथन भी उनके एक-लाइनर्स एक फ़ाइल स्टेट और कुछ डेटा वापस लौटाना होगा की आवश्यकता है, लेकिन मेरा मानना ​​है कि पर्ल सबसे संक्षिप्त तरीके से है।

+0

स्वीकार्य से यह एक बेहतर जवाब है! – Anne

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