Jawaban:
Hanya untuk waktu modifikasi
if test `find "text.txt" -mmin +120`
then
echo old enough
fi
Anda dapat menggunakan -cminuntuk perubahan atau -aminuntuk waktu akses. Seperti yang ditunjukkan orang lain, saya rasa Anda tidak dapat melacak waktu pembuatan.
findmengembalikan bukan nol ketika tidak ada kecocokan yang ditemukan.
text.txtdianggap bukan direktori.
[ "$(find path/to/file -mmin +120)" ] && echo "it is old"
Saya selalu suka menggunakan date -r /the/file +%s untuk menemukan usianya.
Anda juga dapat melakukannya touch --date '2015-10-10 9:55' /tmp/fileuntuk mendapatkan waktu yang sangat terperinci pada tanggal / waktu yang berubah-ubah.
let AGE=$(($(date +%s)-$(date -r /path/to/file +%s))) [dengan asumsi yang dibuat dan tidak pernah diubah, atau "usia relatif terhadap mod"]
function file-age { FILE_CREATED_TIME=`date -r "$1" +%s`; TIME_NOW=`date +%s`; echo "$[ ${TIME_NOW} - ${FILE_CREATED_TIME} ]"; }
$[ ], jika tidak usang , paling tidak tua dan kurang portabel , dan $(( ))sebagai gantinya harus digunakan ; dan kutipan balik lebih rapuh daripada $( ); dan juga tanda hubung di nama fungsi mungkin tidak sepenuhnya portabel. Namun, intinya bagus!
Menggunakan statuntuk mengetahui tanggal modifikasi terakhir file, dateuntuk mengetahui waktu saat ini dan penggunaan bashisme yang bebas, seseorang dapat melakukan pengujian yang Anda inginkan berdasarkan waktu modifikasi terakhir file 1 .
if [ "$(( $(date +"%s") - $(stat -c "%Y" $somefile) ))" -gt "7200" ]; then
echo "$somefile is older then 2 hours"
fi
Meskipun kodenya sedikit kurang dapat dibaca daripada findpendekatannya, saya pikir ini adalah pendekatan yang lebih baik daripada menjalankan finduntuk melihat file yang sudah "ditemukan". Selain itu, manipulasi tanggal juga menyenangkan ;-)
%Zsebagai pengganti di %Ybawah ini untuk mendapatkan "waktu perubahan" yang mungkin sesuai dengan keinginan Anda.[Memperbarui]
Untuk pengguna mac, gunakan stat -f "%m" $somefilesintaks khusus Linux di atas sebagai pengganti
stattidak builtin - sangat buruk dari saya, saya akan memperbaikinya.
Waktu pembuatan tidak disimpan.
Apa yang disimpan adalah tiga cap waktu (umumnya, mereka dapat dimatikan pada sistem file tertentu atau dengan opsi sistem file tertentu):
a "Perubahan" ke file dihitung sebagai perubahan izin, ganti nama, dll. Sementara modifikasi hanya konten.
Meskipun ctime tidak secara teknis waktu penciptaan, namun seringkali demikian.
Karena ctime tidak terpengaruh oleh perubahan konten file, biasanya hanya diperbarui saat file dibuat. Dan ya - saya dapat mendengar Anda semua berteriak - itu juga diperbarui jika Anda mengubah izin akses atau kepemilikan ... tetapi umumnya itu adalah sesuatu yang dilakukan sekali, biasanya pada saat yang sama Anda meletakkan file di sana.
Secara pribadi saya selalu menggunakan mtime untuk segala hal, dan saya membayangkan itulah yang Anda inginkan. Tapi bagaimanapun ... berikut adalah pengulangan dari pesta "tidak menarik" Guss, dalam fungsi yang mudah digunakan.
#! / bin / bash
function age () {
nama file lokal = $ 1
lokal berubah = `stat -c% Y" $ nama file "`
lokal sekarang = `tanggal +% s`
lokal berlalu
let elapsed = sekarang-berubah
echo $ berlalu
}
file = "/"
echo Umur $ file adalah $ (age "$ file") detik.
local changed=$(perl -MFile::stat -e "print stat(\"${filename}\")->mtime") superuser.com/questions/427551/…
chmod, diterapkan pada file tersebut, akan membatalkan ide itu. Tapi aku bisa hidup denganmu melakukan itu ;-)
+%sparuh kedua
age() { echo $(( $(date +%s) - $(date -r "$1" +%s) )); } (Terima kasih kepada @Grizly untuk koreksinya!)
noatimeopsi (yang bagus untuk kinerja jadi Anda harus menggunakannya). Jadi gunakan saja, %Xbukan %Y.
Menemukan yang bagus tetapi saya pikir Anda dapat menggunakan cara lain, terutama jika Anda perlu sekarang berapa detik file yang lama
date -d "now - $( stat -c "%Y" $filename ) seconds" +%s
menggunakan tanggal GNU
Pertimbangkan hasil dari alat 'stat':
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
Anda dapat melihat di sini tiga tanggal untuk Mengakses / memodifikasi / mengubah. Tidak ada tanggal dibuat. Anda hanya dapat benar-benar yakin bila konten file telah diubah (kolom "ubah") atau inode-nya diubah (kolom "ubah").
Contoh saat kedua kolom diperbarui:
"Ubah" akan diperbarui jika seseorang menggabungkan informasi tambahan ke akhir file.
"Ubah" akan diperbarui jika seseorang mengubah izin melalui chmod.
saya menggunakan
file_age() {
local filename=$1
echo $(( $(date +%s) - $(date -r $filename +%s) ))
}
is_stale() {
local filename=$1
local max_minutes=20
[ $(file_age $filename) -gt $(( $max_minutes*60 )) ]
}
if is_stale /my/file; then
...
fi