मैं लाइनक्स बैश में जांचना चाहता हूं कि क्या कोई फ़ाइल एक्स समय से पहले बनाई गई थी।
मान लीजिए कि फ़ाइल को text.txt कहा जाता है और समय 2 घंटे है।
if [ what? ]
then
echo "old enough"
fi
मैं लाइनक्स बैश में जांचना चाहता हूं कि क्या कोई फ़ाइल एक्स समय से पहले बनाई गई थी।
मान लीजिए कि फ़ाइल को text.txt कहा जाता है और समय 2 घंटे है।
if [ what? ]
then
echo "old enough"
fi
जवाबों:
केवल संशोधन समय के लिए
if test `find "text.txt" -mmin +120`
then
echo old enough
fi
आप -cminपरिवर्तन के लिए या -aminपहुँच समय के लिए उपयोग कर सकते हैं। जैसा कि दूसरों ने बताया कि मुझे नहीं लगता कि आप सृजन समय को ट्रैक कर सकते हैं।
findजब कोई मैच नहीं मिले तो गैर-शून्य लौटा।
text.txtएक निर्देशिका नहीं माना जाता है।
[ "$(find path/to/file -mmin +120)" ] && echo "it is old"
मुझे हमेशा date -r /the/file +%sसे इसकी उम्र का पता लगाना पसंद था ।
आप touch --date '2015-10-10 9:55' /tmp/fileएक मनमानी तिथि / समय पर अत्यंत ठीक-ठाक समय प्राप्त करने के लिए भी कर सकते हैं ।
let AGE=$(($(date +%s)-$(date -r /path/to/file +%s))) [इस धारणा के साथ कि इसे बनाया और कभी संशोधित नहीं किया गया, या "मॉड के सापेक्ष आयु"]
function file-age { FILE_CREATED_TIME=`date -r "$1" +%s`; TIME_NOW=`date +%s`; echo "$[ ${TIME_NOW} - ${FILE_CREATED_TIME} ]"; }
$[ ]है, अगर नहीं पदावनत कम से कम, पुराने और कम पोर्टेबल है, और एक का उपयोग करना चाहिए $(( ))बजाय; और backquotes की तुलना में अधिक नाजुक हैं $( ); और फ़ंक्शन नामों में भी हाइफ़न पूरी तरह से पोर्टेबल नहीं हो सकते हैं। इसका सार अच्छा है, हालांकि!
का उपयोग करते हुए stat, बाहर फ़ाइल की अंतिम संशोधन दिनांक लगाने की dateवर्तमान समय और bashisms के ज़्यादा इस्तेमाल यह पता लगाने की, एक परीक्षण है कि आप फ़ाइल के अंतिम संशोधन समय के आधार पर चाहते हैं कर सकते हैं 1 ।
if [ "$(( $(date +"%s") - $(stat -c "%Y" $somefile) ))" -gt "7200" ]; then
echo "$somefile is older then 2 hours"
fi
जब कोड थोड़ा कम पठनीय होता है, तब findदृष्टिकोण, मुझे लगता है कि इसका बेहतर तरीका है कि findआप पहले से ही "पाए गए" फ़ाइल को देखने के लिए दौड़ रहे हैं । इसके अलावा, तारीख हेरफेर मजेदार है ;-)
%Zबजाय का उपयोग करें %Yजो आप चाहते हैं।[अपडेट करें]
मैक उपयोगकर्ताओं के लिए, stat -f "%m" $somefileऊपर लिनक्स विशिष्ट सिंटैक्स के बजाय का उपयोग करें
statबिलिन नहीं है - मुझे बहुत बुरा लगा, मैं ठीक कर दूंगा।
निर्माण समय संग्रहीत नहीं है।
क्या संग्रहीत हैं तीन टाइमस्टैम्प्स (आम तौर पर, उन्हें कुछ फाइल सिस्टम पर या कुछ फाइलसिस्टम विकल्पों द्वारा बंद किया जा सकता है):
फ़ाइल में "परिवर्तन" को अनुमति परिवर्तन, नाम बदलने आदि के रूप में गिना जाता है, जबकि संशोधन केवल सामग्री है।
हालांकि समय-समय पर तकनीकी रूप से निर्माण का समय नहीं है , यह अक्सर होता है।
चूंकि यह फ़ाइल की सामग्री में परिवर्तन से प्रभावित नहीं है, इसलिए यह आमतौर पर केवल तब ही अपडेट किया जाता है जब फ़ाइल बनाई जाती है। और हां - मैं आपको चिल्लाते हुए सुन सकता हूं - यह भी अद्यतन किया जाता है यदि आप एक्सेस अनुमतियों या स्वामित्व को बदलते हैं ... लेकिन आम तौर पर ऐसा कुछ होता है जो एक बार होता है, आमतौर पर उसी समय आप फ़ाइल को वहां डालते हैं।
व्यक्तिगत रूप से मैं हमेशा सब कुछ के लिए माइम का उपयोग करता हूं, और मैं कल्पना करता हूं कि आप क्या चाहते हैं। लेकिन वैसे भी ... यहाँ एक आसान उपयोग करने के लिए, Guss के "बदसूरत" बैश का पूर्वाभ्यास है।
#! / Bin / bash
कार्य आयु () {
स्थानीय फ़ाइल नाम = $ 1
स्थानीय परिवर्तित = `स्टेट -c% Y" $ फ़ाइलनाम "
स्थानीय अब = `तिथि +% s`
स्थानीय बीत गया
बीता हुआ = अब बदला हुआ
$ गूंज गूंज
}
फ़ाइल = "/"
गूंज $ फ़ाइल की आयु $ है (आयु "$ फ़ाइल") सेकंड।
local changed=$(perl -MFile::stat -e "print stat(\"${filename}\")->mtime") superuser.com/questions/427551/…
chmodफ़ाइल पर लागू एक सरल , उस विचार को शून्य कर देगा। लेकिन मैं आपके साथ ऐसा कर सकता हूं ;-)
+%sदूसरी छमाही से गायब हैं
age() { echo $(( $(date +%s) - $(date -r "$1" +%s) )); } (सुधार के लिए @Grizly के लिए धन्यवाद!)
noatimeऑप्शन के साथ माउंट किए गए सभी फाइल सिस्टम पर एक निर्माण समय है (जो प्रदर्शन के लिए अच्छा है इसलिए आपको इसका उपयोग करना चाहिए)। तो %Xइसके बजाय बस का उपयोग करें %Y।
खोज एक अच्छी है, लेकिन मुझे लगता है कि आप किसी अन्य मार्ग का उपयोग कर सकते हैं, खासकर अगर आपको अब कितने सेकंड पुराने फ़ाइल की आवश्यकता है
date -d "now - $( stat -c "%Y" $filename ) seconds" +%s
GNU दिनांक का उपयोग करना
उपकरण 'स्टेट' के परिणाम पर विचार करें:
File: `infolog.txt'
Size: 694 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 11635578 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ fdr) Gid: ( 1000/ fdr)
Access: 2009-01-01 22:04:15.000000000 -0800
Modify: 2009-01-01 22:05:05.000000000 -0800
Change: 2009-01-01 22:05:05.000000000 -0800
आप यहां एक्सेस / संशोधित / परिवर्तन की तीन तिथियां देख सकते हैं। कोई बनाई गई तारीख नहीं है। आप वास्तव में केवल तभी सुनिश्चित हो सकते हैं जब फ़ाइल सामग्री को संशोधित किया गया था ("संशोधित" फ़ील्ड) या इसका इनकोड बदल गया ("परिवर्तन" फ़ील्ड)।
दोनों क्षेत्रों के अद्यतन होने के उदाहरण:
यदि फ़ाइल के अंत में किसी व्यक्ति ने अतिरिक्त जानकारी एकत्र की है तो "संशोधित करें" अपडेट किया जाएगा।
यदि किसी ने chmod के माध्यम से अनुमतियां बदलीं तो "बदलें" अपडेट हो जाएगा।