Yanıtlar:
Sadece değişiklik zamanı için
if test `find "text.txt" -mmin +120`
then
echo old enough
fi
-cminDeğişim veya -aminerişim süresi için kullanabilirsiniz . Diğerlerinin de belirttiği gibi, oluşturma zamanını izleyebileceğinizi sanmıyorum.
findhiçbir eşleşme bulunmadığında sıfırdan farklı döndü diye düşünüyordum .
text.txtbir dizin olmadığı varsayılır.
[ "$(find path/to/file -mmin +120)" ] && echo "it is old"
date -r /the/file +%sYaşı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 findyaklaşı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 ;-)
%Zyerine kullanın %Y.[Güncelleme]
Mac kullanıcıları için, stat -f "%m" $somefileyukarıdaki Linux'a özgü sözdizimi yerine kullanın
statyerleş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/…
chmoddosya ü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!)
noatimeseç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 %Xyerine 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.