Linux
使用 bash 腳本查找兩個時間戳之間的修改文件
我想找出在某個時間間隔之間發生變化的文件。我正在使用的腳本是
#!/bin/bash find ./ -type f -newermt '2018-05-24 09:26:50' ! -newermt '2018-05-24 09:26:52'
我的文件夾包含以下文件:
-rwxr-xr-x 1 root root 219 May 24 09:26 sql_runner.sh -rwxr-xr-x 1 root root 3.6K May 24 09:26 script.sh -rwxr-xr-x 1 root root 3.1K May 24 09:26 script_ide.sh -rwxr-xr-x 1 root root 8.8K May 24 09:26 q -rw-r--r-- 1 root root 17 May 24 09:26 program.txt -rw-r--r-- 1 root root 346 May 24 09:26 main.c drwx------ 2 root root 12K May 24 09:26 lost+found -rwxr-xr-x 1 root root 1.7K May 24 09:26 javaRunner.sh -rw-r--r-- 1 root root 0 May 24 09:26 inputParams -rw-r--r-- 1 root root 2 May 24 09:26 inputForInfinite -rw-r--r-- 1 root root 14 May 24 09:26 inputFile
當我執行上述腳本時,它不會返回任何內容,但是當我將腳本更改為此
#!/bin/bash find ./ -type f -newermt '2018-05-24 09:26:49' ! -newermt '2018-05-24 09:26:52'
即將時間減少 1 秒(從
2018-05-24 09:26:50
到2018-05-24 09:26:49
),它給了我所需的結果:./inputFile ./main.c ./sql_runner.sh ./script_ide.sh ./q ./inputForInfinite ./javaRunner.sh ./program.txt ./inputParams ./script.sh
為什麼我會有這樣的行為,因為給的輸出
date -r ./sql_runner.sh
是:Thu May 24 09:26:50 UTC 2018
我應該在此腳本中更改什麼以獲得所需的行為?
顯然,
sql_runner.sh
(和其他文件)的時間戳在 09:26:49.000 和 09:26:49.999 之間;因此,它比 …49 更新,但不比 …50 更新。如果你想分割頭髮秒,GNU find會將時間戳比較到納秒:/* Returns ts1 - ts2 */ static double ts_difference (struct timespec ts1, struct timespec ts2) { double d = difftime (ts1.tv_sec, ts2.tv_sec) + (1.0e-9 * (ts1.tv_nsec - ts2.tv_nsec)); return d; } static int compare_ts (struct timespec ts1, struct timespec ts2) { if ((ts1.tv_sec == ts2.tv_sec) && (ts1.tv_nsec == ts2.tv_nsec)) { return 0; } else { double diff = ts_difference (ts1, ts2); return diff < 0.0 ? -1 : +1; } }
你很接近語法;使用句點添加小數秒,而不是另一個冒號:
find ./ -type f -newermt '2018-05-24 09:26:50.200' ...