如何以秒為單位設置(查找)時間?
如何設置
-atime
毫秒、秒或分鐘?預設為天:-atime n
文件最後一次訪問是在 n*24 小時前。當找出最後一次訪問文件的時間是多少 24 小時前,任何小數部分都將被忽略,因此要匹配 -atime +1,文件必須至少在兩天前被訪問過。
我想執行一個 cron 作業,比如每小時檢查一次是否在該時間範圍內訪問了特定目錄中的文件。以小數形式輸入時間似乎不起作用,即
find . -atime 0.042 -print
但也許有更好的解決方案——也許是另一個命令?或者這可能無法完成.. 對於查找在過去x分鐘內修改的文件,有
-mmin
允許以分鐘為單位設置時間。也許沒有這樣的訪問時間選項意味著資訊的儲存方式不同?我正在使用 Ubuntu 16.04。
請注意,當您這樣做時
-mtime <timespec>
,將開始<timespec>
檢查當時文件的年齡find
。除非您在非常小的目錄樹中執行它,否則
find
將需要幾毫秒(如果不是幾秒或幾小時)來爬取目錄樹並對lstat()
每個文件執行一次。因此,具有小於一秒的精度並不一定很有意義。另請注意,並非所有文件系統都支持具有亞秒粒度的時間戳。
話雖如此,有幾個選擇。
使用
find
許多 BSD 和來自 的一個schily-tools
,您可以執行以下操作:find . -atime -1s
查找最後一次訪問不到一秒前的文件(與
find
啟動時間相比)。與
zsh
:ls -ld -- **/*(Dms-1)
對於亞秒級粒度,使用 GNU 工具,您可以使用您設置的參考文件
touch
:touch -ad '0.5 seconds ago' ../reference find . -anewer ../reference
或使用最新版本
perl
:perl -MTime::HiRes=lstat,clock_gettime -MFile::Find -le ' $start = clock_gettime(CLOCK_REALTIME) - 0.5; find( sub { my @s = lstat $_; print $File::Find::name if @s and $s[8] > $start }, ".")'
使用 GNU find,您可以
-amin
使用-atime
. 正如您可能猜到的那樣,它是“文件在 n 分鐘前被最後一次訪問”。也就是說,請注意,大多數現代系統預設使用文件系統選項,該
relatime
選項僅在文件自上次訪問後實際修改或已超過門檻值(通常為 24 小時)時才更新,從而節省元數據寫入。因此,您可能想要為相關文件系統更改它,或者尋找另一種方法。incrond是一種設置腳本以觸發文件系統活動的便捷方法,而無需編寫自己的守護程序。