दी गई फ़ाइल की आयु प्राप्त करें


13

मैं किसी फ़ाइल की आयु कम से कम दिनों में कैसे प्राप्त कर सकता हूं?

मैं अच्छी तरह से ls -lhऔर इसी तरह के आदेशों से अवगत हूं । मुझे कुछ ऐसा चाहिए जो इस तरह काम करे:

getfage <FILE> # prints out '12d' (12 days)

इसके अलावा, यह कुछ हद तक क्रॉस-प्लेटफ़ॉर्म होने की आवश्यकता है क्योंकि मैं मैक ओएस एक्स के तहत भी इसका उपयोग करना चाहता हूं, लेकिन प्राथमिक उपयोग-मामला मेरे लिनक्स-बॉक्स पर है।

ध्यान दें

चूंकि लिनक्स निर्माण समय को ट्रैक नहीं करता है, मैं दो गुना समाधान की तलाश कर रहा हूं: एक माइम (लिनक्स) के लिए - जो कि पिछली बार कहा गया था कि फ़ाइल को संशोधित किया गया था - और मैक ओएस एक्स के लिए एक, जो या तो निपट सकता है माइम या निर्माण का समय।



@ एसएलएम विशेष रूप से निर्माण समय के बारे में है, यह कमांड लाइन पर उम्र की गणना करने में नहीं जाता है।
गिल्स एसओ- बुराई को रोकना '


@terdon, वास्तव में नहीं। ऊपर मेरा नोट देखें ।
अलेक्सेज मगुरा

@AlexejMagura और कैसे जवाब में आप के लिए नहीं करते हैं? statक्या आप सभी को सही चाहिए?
terdon

जवाबों:


17

यूनिक्स एक निर्माण तिथि का ट्रैक नहीं रखता है। केवल वही जानकारी उपलब्ध है जो आमतौर पर पिछली बार फाइलों में थी:

  1. एक्सेस किया गया
  2. संशोधित
  3. बदला हुआ
  • एक्सेस - आखिरी बार फाइल पढ़ी गई थी
  • संशोधित करें - पिछली बार फ़ाइल को संशोधित किया गया था (सामग्री संशोधित की गई है)
  • परिवर्तन - फ़ाइल का पिछली बार मेटा डेटा बदल दिया गया था (जैसे अनुमतियाँ)

( इस जवाब से )

आप statकमांड का उपयोग करके किसी विशेष फ़ाइल से संबंधित तिथियां प्राप्त कर सकते हैं ।

उदाहरण

$ stat ffmpeg 
  File: `ffmpeg'
  Size: 19579304    Blocks: 38248      IO Block: 4096   regular file
Device: fd02h/64770d    Inode: 10356770    Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (  500/    saml)   Gid: (  501/    saml)
Access: 2013-11-26 10:49:09.908261694 -0500
Modify: 2013-11-02 17:05:13.357573854 -0400
Change: 2013-11-02 17:05:13.357573854 -0400

OSX और HFS

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

अंश

फ़ाइल रिकॉर्ड अपने CNID सहित फ़ाइल के बारे में कई मेटाडेटा संग्रहीत करता है, फ़ाइल का आकार, तीन टाइमस्टैम्प (जब फ़ाइल बनाई गई थी, अंतिम बार संशोधित, अंतिम बैकअप लिया गया), डेटा और संसाधन कांटे और पॉइंटर्स की पहली फ़ाइल extents फ़ाइल का पहला डेटा और संसाधन हद रिकॉर्ड्स अतिप्रवाह फ़ाइल में रिकॉर्ड करता है। फ़ाइल रिकॉर्ड दो 16 बाइट फ़ील्ड को भी संग्रहीत करता है जो फाइंडर द्वारा फ़ाइल के बारे में विशेषताओं को संग्रहीत करने के लिए उपयोग किए जाते हैं, जिसमें इसके निर्माता कोड, टाइप कोड, विंडो में दिखाई देने वाली विंडो और विंडो के भीतर इसके स्थान जैसी चीजें शामिल हैं।

मुहर

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

फ़ाइल सिस्टम

यदि आप कभी उत्सुक हों तो इस विकिपीडिया विषय पर एक नज़र डालें जिसका शीर्षक है: फ़ाइल सिस्टम की तुलना । इसमें विभिन्न विशेषताओं की एक अच्छी तालिका के साथ-साथ मुझे पता है कि यह किसी समर्थित फाइलसिस्टम के भीतर समर्थित है या नहीं, इसकी स्थिति के बारे में मुझे पता है।

संदर्भ


अपडेट के लिए धन्यवाद, जो मदद करता है। दरअसल, मैं यहाँ पढ़ता हूं कि ext4 सृजन की तारीखें रख सकता है लेकिन यह अभी तक कर्नेल में लागू नहीं किया गया है।
terdon

@terdon - हाँ, यह समझ में आता है कि कुछ फाइल सिस्टम इसका समर्थन करेगा। यह मेरे लिए लंबे समय से अतिदेय लगता है, मैं अतीत में समझता हूं कि इसे क्यों छोड़ दिया गया था, लेकिन सब कुछ शुरुआत से इतना आगे बढ़ गया है कि इसका स्पष्ट रूप से मतलब नहीं है। साथ ही आप पहुँच समय के लिए समर्थन को अक्षम कर सकते हैं ताकि इसे समान रूप से लागू किया जा सके और फिर अक्षम कर दिया जाए यदि आप वास्तव में ऐसा नहीं चाहते हैं।
SLM

19

OSX फ़ाइल निर्माण का ट्रैक रखता है, लेकिन अधिकांश अन्य यूनियनों में नहीं है, इसलिए फ़ाइल निर्माण के बाद बीता हुआ समय जानने का कोई तरीका नहीं है। आप किसी भी ऑपरेटिंग सिस्टम के बारे में अपने अंतिम संशोधन के बाद से बीता हुआ समय प्राप्त कर सकते हैं।

फ़ाइल के संशोधन समय को पुनः प्राप्त करने के लिए कोई पोर्टेबल शेल उपयोगिता नहीं है, इसके अलावा lsआउटपुट है जो पार्स करने के लिए शून्य -असंभव है। लिनक्स के तहत, निम्न कमांड एक फाइल की उम्र को प्रिंट करता है:

echo $(($(date +%s) - $(date +%s -r "$filename"))) seconds
echo $((($(date +%s) - $(date +%s -r "$filename")) / 86400)) days

लिनक्स के तहत, आप stat -c %Y -- "$filename"एक पर्याय के रूप में उपयोग कर सकते हैं date +%s -r "$filename"

OSX dateऔर statकमांड अलग हैं। आप निम्न आदेश का उपयोग कर सकते हैं:

echo $(($(date +%s) - $(stat -t %s -f %m -- "$filename"))) seconds

गैर-एम्बेडेड लिनक्स सिस्टम और OSX में डिफ़ॉल्ट रूप से पर्ल स्थापित है।

perl -l -e 'print -M $ARGV[0], " days"' "$filename"

क्या यह OS या फाइल सिस्टम पर निर्भर करता है? यह क्यू एंड ए का अर्थ है कि फाइलसिस्टम उन्हें रखता है लेकिन कर्नेल को उन्हें एक्सेस करने के लिए एक विधि प्रदान करने की आवश्यकता है।
terdon

@terdon - मेरे अपडेट देखें।
स्लम

@terdon दोनों। वह Q & A आपके द्वारा लिंक किया गया सही है, वर्तमान फ़ाइल सिस्टम कुछ समय के लिए निर्माण समय को ट्रैक कर रहा है। FreeBSD में, आप वास्तव में इस से प्राप्त कर सकते हैं stat, लिनक्स में syscall को फिर से काम नहीं किया गया है, इसलिए आपको हैकिंग का सहारा लेना होगा debugfs
विंगडसुम्ब्रेनर

1
@wingedsubmariner इस चेतावनी के साथ कि फाइल सिस्टम में निर्माण का समय अक्सर एप्लिकेशन में निर्माण की तारीख नहीं होता है, क्योंकि कई एप्लिकेशन ओवरराइट-इन-प्लेस के बजाय नए संस्करण को बचाने के लिए विधि के रूप में क्रिएट-न्यू-मूव का उपयोग करते हैं।
गिल्स एसओ- बुराई को रोकना '

4

गिलेस के जवाब के आधार पर, यहां एक बश फ़ंक्शन है जो सेकंड या त्रुटि में फ़ाइल की आयु देता है।

function fileAge
{
    local fileMod
    if fileMod=$(stat -c %Y -- "$1")
    then
        echo $(( $(date +%s) - $fileMod ))
    else
        return $?
    fi
}

1
नीट फ़ंक्शन, घंटे, दिनों, सप्ताह में उम्र देखने के लिए साधारण विभाजन जोड़कर अनुकूलित करना आसान है ...
इमैनुएल देवक्स

0

आप उपयोग कर सकते हैं stat -f%B, ls -lUया mdls -n kMDItemFSCreationDateओएस एक्स में सृजन (जन्म) समय देखने के लिए:

$ stat -f%B file
1402340803
$ ls -lU file
-rw-r--r--  1 admin  staff  108514 Jun  9 22:06 file
$ mdls -n kMDItemFSCreationDate file
kMDItemFSCreationDate = 2014-06-09 19:06:43 +0000
$ echo $((($(date +%s)-$(stat -f%B file))/86400))
10

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.