Pertanyaan bagaimana cara memeriksa apakah file telah dibuat lebih dari x waktu yang lalu?


Saya ingin memeriksa di linux bash apakah file dibuat lebih dari x waktu yang lalu.

katakanlah file tersebut bernama text.txt dan waktunya adalah 2 jam.

 if [ what? ]
 then
     echo "old enough"
 fi

76
2018-02-16 09:25


asal


Jawaban:


Hanya untuk waktu modifikasi

if test `find "text.txt" -mmin +120`
then
    echo old enough
fi

Atau, sama dalam satu baris:

#!/bin/bash
find text.txt -mmin +120 -exec echo "old enough" \;

Kamu dapat memakai -cmin untuk perubahan atau -amin untuk waktu akses. Seperti yang orang lain katakan saya tidak berpikir Anda dapat melacak waktu pembuatan.


103
2018-02-16 09:36



Saya selalu suka menggunakan date -r /the/file +%s untuk menemukan umurnya.

Anda juga bisa melakukannya touch --date '2015-10-10 9:55' /tmp/file untuk mendapatkan waktu yang sangat halus pada tanggal / waktu yang sewenang-wenang.


33
2018-03-08 00:46



Waktu pembuatan tidak disimpan.

Apa yang disimpan adalah tiga cap waktu (umumnya, mereka dapat dimatikan pada sistem file tertentu atau oleh opsi filesystem tertentu):

  • Waktu akses terakhir
  • Waktu modifikasi terakhir
  • Waktu perubahan terakhir

a "Ubah" ke file dihitung sebagai perubahan izin, mengubah nama dll. Sementara modifikasi hanya isinya.


16
2018-02-16 09:33



Menggunakan stat untuk mencari tahu tanggal modifikasi file terakhir, date untuk mengetahui waktu saat ini dan penggunaan bashisms secara bebas, seseorang dapat melakukan tes yang Anda inginkan berdasarkan waktu modifikasi terakhir file tersebut.1.

if [ "$(( $(date +"%s") - $(stat -c "%Y" $somefile) ))" -gt "7200" ]; then
   echo "$somefile is older then 2 hours"
fi

Sementara kode sedikit kurang terbaca maka find pendekatan, saya pikir itu pendekatan yang lebih baik kemudian berjalan find untuk melihat file yang sudah Anda "temukan". Juga, manipulasi tanggal menyenangkan ;-)


  1. Seperti Phil mencatat dengan benar waktu penciptaan tidak dicatat, tetapi gunakan %Z dari pada %Y di bawah ini untuk mendapatkan "waktu perubahan" yang mungkin menjadi apa yang Anda inginkan.

[Memperbarui]

Untuk pengguna mac, gunakan stat -f "%m" $somefile bukan sintaks khusus Linux di atas


12
2017-09-09 19:18



Meskipun ctime tidak secara teknis waktu penciptaan, itu cukup sering.

Karena ctime tidak terpengaruh oleh perubahan isi file, biasanya hanya diperbarui ketika 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 semuanya, dan saya membayangkan itu adalah apa yang Anda inginkan. Tapi bagaimanapun ... inilah pengulangan dari "bash" tidak menarik Guss, dalam fungsi yang mudah digunakan.

#! / bin / bash
function age () {
   nama file lokal = $ 1
   lokal berubah = `stat -c% Y" $ filename "`
   lokal sekarang = `tanggal +% s`
   lokal berlalu

   biarkan berlalu = sekarang berubah
   echo $ berlalu
}

file = "/"
echo Usia file $ adalah $ (umur "$ file") detik.

11
2018-03-25 10:15



Menemukannya bagus tapi saya pikir Anda dapat menggunakan jalan lain, terutama jika Anda perlu sekarang berapa detik file lama

date -d "now - $( stat -c "%Y" $filename ) seconds" +%s

menggunakan tanggal GNU


5
2018-05-06 13:06



Pertimbangkan hasil 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 Akses / modifikasi / ubah. Tidak ada tanggal dibuat. Anda hanya bisa benar-benar yakin ketika isi file itu dimodifikasi (bidang "modifikasi") atau inodenya berubah ("perubahan" bidang).

Contoh saat kedua kolom diperbarui:

"Modifikasi" akan diperbarui jika seseorang menggabungkan informasi ekstra ke ujung file.

"Ubah" akan diperbarui jika seseorang mengubah izin melalui chmod.


3
2018-02-16 09:33