2011-01-23 22 views
21

Dosyamın 5 günden eski olup olmadığını kontrol etmek için find myfile.txt -mtime +5 yapabildiğimin farkındayım. Ancak, myfile.txt günlerinde mtime almak ve daha fazla kullanım için bir değişkene saklamak istiyorum. Bunu nasıl yaparım?bash - Belirli bir dosyadan anı mı alacaksınız?

cevap

43

stat sana o bilgi verebilir:

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

%Y size "Çağın beri saniye" olarak geçen modifikasyon verir, ama birçok diğer seçenek vardır; more info. Ah, gün içinde zaman istiyorum ancak değiştirilmiş beri: Dosya 15:30 GMT 2011-01-22 tarihinde güncellenmiştir Yani, yukarıda

Düzenleme 1295710237. bölgesinde bir dizi dönecekti . Bu daha karmaşık olacak, en azından bir "gün" sabit bir zaman değil (bazı "günler" sadece 23 saat, diğerleri 25   — sayesinde gün ışığından yararlanma süresi).

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

... ama yine o bir gün farz ediyor her zaman tam olarak 86.400 ikinci uzun:

naif versiyonu aşağıdaki gibi görünebilir.

Daha fazla bilgi için aritmetik in bash here.

+0

Bu çok hoştu, maalesef kendimi aptal yerine koymuştum ve günler içinde mtime çağına ihtiyacım olduğunu unuttum. Mümkün mü? – Industrial

+0

@Industrial: Değere sahip olduğunuzda, üzerinde matematik yapabilirsiniz. Ne demek istediğini takip etmiyorum "... günlerde maman yaşı." (Günlerden beri ne zaman? Kaç gün önce değiştirildiğini mi kastediyorsun?) –

+0

Günlerce ilgili kısmı kaçırdım, oy ver +1 – Anders

2

Bu cevap ben miyim? Perl'in -M operatörü sizin için güne stat çağrı ve dönüşüm kolları olarak

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) 

, günde $ dosyasının yaşına $ AGE ayarlayacaktır istatistik yardım en

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

bakış .

Dönüş değeri, kayan nokta değeridir (ör. 6.62849537 gün). Eğer bir tamsayı sonucunu Yakut ve Python de bir dosya Stat ve bazı verileri döndürmek için onların bir gömlekler var

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

olması gerekiyorsa ifadeye bir int ekleyin ama Perl en özlü şekilde olduğuna inanıyorum.

+0

Bu, kabul edilenlerden daha iyi bir cevap! – Anne

İlgili konular