Command-Line

如何以秒為單位設置(查找)時間?

  • June 12, 2018

如何設置-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是一種設置腳本以觸發文件系統活動的便捷方法,而無需編寫自己的守護程序。

引用自:https://unix.stackexchange.com/questions/338963