Yanıtlar:
Sadece değişiklik zamanı için
if test `find "text.txt" -mmin +120`
then
echo old enough
fi
-cmin
Değişim veya -amin
erişim süresi için kullanabilirsiniz . Diğerlerinin de belirttiği gibi, oluşturma zamanını izleyebileceğinizi sanmıyorum.
find
hiçbir eşleşme bulunmadığında sıfırdan farklı döndü diye düşünüyordum .
text.txt
bir dizin olmadığı varsayılır.
[ "$(find path/to/file -mmin +120)" ] && echo "it is old"
date -r /the/file +%s
Yaşını bulmak için kullanmayı hep sevmişimdir .
Ayrıca touch --date '2015-10-10 9:55' /tmp/file
, gelişigüzel bir tarih / saatte son derece ayrıntılı bir zaman elde etmek için de yapabilirsiniz .
let AGE=$(($(date +%s)-$(date -r /path/to/file +%s)))
ile [oluşturulmuş ve hiç değiştirilmemiş varsayımıyla veya "
function file-age { FILE_CREATED_TIME=`date -r "$1" +%s`; TIME_NOW=`date +%s`; echo "$[ ${TIME_NOW} - ${FILE_CREATED_TIME} ]"; }
$[ ]
değilse olduğunu kaldırılmış , en azından eski ve daha az taşınabilir ve bir kullanmalıdır $(( ))
yerine; ve geri alıntılar daha kırılgandır $( )
; ve ayrıca işlev adlarındaki kısa çizgiler tam olarak taşınabilir olmayabilir. Yine de özü iyidir!
Kullanılması stat
, dosyanın son değişiklik tarihini anlamaya date
şimdiki zaman ve bashisms liberal kullanımını anlamaya, bir sen dosyanın son değişiklik zamanına göre istediğiniz testi yapabilirsiniz 1 .
if [ "$(( $(date +"%s") - $(stat -c "%Y" $somefile) ))" -gt "7200" ]; then
echo "$somefile is older then 2 hours"
fi
Kod find
yaklaşıma göre biraz daha az okunabilir olsa da, daha find
önce "bulduğunuz" bir dosyaya bakmak için koşmaktan daha iyi bir yaklaşım olduğunu düşünüyorum . Ayrıca tarih manipülasyonu eğlencelidir ;-)
%Z
yerine kullanın %Y
.[Güncelleme]
Mac kullanıcıları için, stat -f "%m" $somefile
yukarıdaki Linux'a özgü sözdizimi yerine kullanın
stat
yerleşik değil - benim için çok kötü, düzelteceğim.
Oluşturma zamanı kaydedilmez.
Depolananlar üç zaman damgasıdır (genellikle, belirli dosya sistemlerinde veya belirli dosya sistemi seçenekleriyle kapatılabilirler):
Dosyadaki bir "Değişiklik", izin değişiklikleri, yeniden adlandırma vb. olarak sayılır. Değişiklik yalnızca içeriktir.
Ctime teknik olarak yaratılış zamanı olmasa da , çoğu zaman öyledir.
Ctime, dosyanın içeriğindeki değişikliklerden etkilenmediğinden, genellikle yalnızca dosya oluşturulduğunda güncellenir. Ve evet - hepinizin çığlık attığını duyabiliyorum - erişim izinlerini veya sahipliğini değiştirirseniz de güncellenir ... ama genellikle bu bir kez yapılır, genellikle dosyayı oraya koyarken aynı anda yapılır.
Şahsen ben her zaman her şey için mtime kullanırım ve senin istediğinin bu olduğunu düşünüyorum. Ama her neyse ... işte Guss'un "çekici olmayan" bash'ının kullanımı kolay bir işlevde yeniden yayınlanması.
#! / bin / bash function yaş () { yerel dosya adı = 1 $ yerel değiştirildi = `stat -c% Y" $ dosya adı "` şimdi yerel = `tarih +% s` yerel geçen let geçen = şimdi-değiştirildi echo $ geçti } file = "/" echo $ file'ın yaşı $ (yaş "$ dosya") saniyedir.
local changed=$(perl -MFile::stat -e "print stat(\"${filename}\")->mtime")
superuser.com/questions/427551/…
chmod
dosya üzerine uygulandığı için bu fikri geçersiz kılacaktır. Ama seninle bunu yaparak yaşayabilirim ;-)
+%s
İkinci yarıdaki eksik
age() { echo $(( $(date +%s) - $(date -r "$1" +%s) )); }
(düzeltme @Grizly teşekkürler!)
noatime
seçenekle bağlanan tüm dosya sistemlerinde bir oluşturma zamanı olan erişim zamanını kullanmak daha iyidir (bu performans için iyidir, bu yüzden onu kullanmalısınız). Bu yüzden %X
yerine kullanın %Y
.
Bulmak iyi ama bence başka bir yol da kullanabilirsiniz, özellikle şu anda dosya kaç saniyedir gerekiyorsa
date -d "now - $( stat -c "%Y" $filename ) seconds" +%s
GNU tarihini kullanarak
'İstatistik' aracının sonucunu düşünün:
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
Burada Erişim / değiştirme / değiştirme için üç tarihi görebilirsiniz. Oluşturma tarihi yok. Yalnızca dosya içeriğinin ne zaman değiştirildiğinden ("değiştir" alanı) veya inode'unun değiştirildiğinden ("değiştir" alanı) gerçekten emin olabilirsiniz.
Her iki alanın ne zaman güncellendiğine ilişkin örnekler:
Birisi dosyanın sonuna fazladan bilgi eklerse "Değiştir" güncellenecektir.
Birisi chmod aracılığıyla izinleri değiştirirse "Değiştir" güncellenecektir.