stat
dapat memberi Anda info itu:
filemtime=$(stat -c %Y myfile.txt)
%Y
memberi Anda modifikasi terakhir sebagai "detik sejak The Epoch", tetapi ada banyak pilihan lain; Info lebih lanjut. Jadi, jika file diubah pada 22-01-2011 pukul 15.30 GMT, angka di atas akan menghasilkan angka di wilayah 1295710237.
Edit :Ah, Anda ingin waktu dalam hitungan hari sejak dimodifikasi. Itu akan menjadi lebih rumit, paling tidak karena "hari" bukanlah jangka waktu tetap (beberapa "hari" hanya memiliki 23 jam, yang lain 25 — berkat waktu musim panas).
naif versi mungkin terlihat seperti ini:
filemtime=$(stat -c %Y "$1")
currtime=$(date +%s)
diff=$(( (currtime - filemtime) / 86400 ))
echo $diff
...tetapi sekali lagi, dengan asumsi satu hari selalu tepat 86.400 detik.
Lebih lanjut tentang aritmatika di bash di sini.
AGE=$(perl -e 'print -M $ARGV[0]' $file)
akan menyetel $AGE ke usia $file dalam beberapa hari, sebagai -M
Perl operator menangani stat
panggilan dan konversi ke hari untuk Anda.
Nilai yang dikembalikan adalah nilai floating-point (mis., 6,62849537 hari). Tambahkan int
ke ekspresi jika Anda perlu memiliki hasil bilangan bulat
AGE=$(perl -e 'print int -M $ARGV[0]' $file)
Ruby dan Python juga memiliki one-liners untuk membuat file dan mengembalikan beberapa data, tetapi saya yakin Perl memiliki cara yang paling ringkas.
Utilitas tanggal memiliki sakelar praktis untuk mengekstrak mtime dari file, yang kemudian dapat Anda tampilkan atau simpan menggunakan format string.
date -r file "+%F"
# 2021-01-12
file_mtime=$(date -r file "+%F")
Lihat man date
, keluaran tanggal dikontrol oleh string format yang diawali dengan "+"
String format yang berguna untuk membandingkan banyak tanggal mungkin termasuk:
"+%j": day of year
"+%s": unix epoch time
Aritmatika dengan tanggal sedikit menyusahkan bash, jadi jika Anda membutuhkan waktu relatif yang akan bekerja di semua kasus sudut, Anda mungkin lebih baik menggunakan bahasa lain.