특정 시간 간격 내에 변경된 파일을 찾고 싶습니다. 내가 사용하는 스크립트는
#!/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
Gives의 출력은 다음과 같기 때문에 왜 이런 동작이 발생합니까 ?
Thu May 24 09:26:50 UTC 2018
원하는 동작을 얻으려면 이 스크립트에서 무엇을 변경해야 합니까?
답변1
sql_runner.sh
분명히 (및 기타 파일)의 타임스탬프는 09:26:49.000에서 09:26:49.999 사이입니다. 따라서...49보다 최신이지만...50보다 최신은 아닙니다. 시간과 경쟁 하고 싶다면 ,GNU 찾기타임스탬프를 나노초와 비교합니다.
/* 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' ...