मैं लाइनक्स बैश में जांचना चाहता हूं कि क्या कोई फ़ाइल एक्स समय से पहले बनाई गई थी।
मान लीजिए कि फ़ाइल को 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 के माध्यम से अनुमतियां बदलीं तो "बदलें" अपडेट हो जाएगा।