GNU find
man에서는 이 옵션에 대해 읽을 수 있습니다 -atime
:
-atime n
파일은 n*24시간 전에 마지막으로 액세스되었습니다. find가 24시간 전에 파일에 마지막으로 액세스한 기간을 계산할 때 모든 소수 부분은 무시됩니다. 따라서 -atime +1을 일치시키려면 파일에 적어도 2일 전에 액세스했어야 합니다.
"n일 전" 대신 "n*24시간 전"을 사용한 점에 유의하세요.
이제 이것은 25시간 길이의 날(때때로 윤초가 있는 24시간 1초 길이의 날이 있음)에 겨울 시간으로 전환하면 어떻게 될지 걱정하게 만듭니다.
매일 크론 작업을 사용하는 경우 find -daystart -atime +1
반복되는 시간 동안 액세스한 파일이 손실될 수 있나요?
답변1
-daystart
설명서 에는 다음과 같이 나와 있습니다.
- 옵션:
-daystart
시간은 24시간 전이 아닌 오늘부터 측정됩니다. 따라서 어제 수정된 홈 디렉토리의 일반 파일을 나열하려면 다음을 수행하십시오.
find ~/ -daystart -type f -mtime 1
"-daystart" 옵션은 다른 테스트가 실행되는 방식에 영향을 준다는 점에서 대부분의 다른 옵션과 다릅니다. 영향을 받는 테스트는 "-amin", "-cmin", "-mmin", "-atime", "-ctime" 및 "-mtime"입니다. "-daystart" 옵션은 명령줄에서 이 옵션 뒤에 나타나는 모든 테스트 동작에만 영향을 미칩니다.
이는 다음을 실행하는 경우를 의미합니다.
find . -daystart -mtime 1
2015-10-25 01:00
그러면 (해당 시간의 첫 번째 발생)과 겨울 변경 시간 다음 날(올해 유럽에서는 2015-10-25) 사이에 마지막으로 수정된 파일이 제공됩니다 2015-10-25 23:59:59.999...
.
다음과 같이 실행하면
find . -daystart -mtime 0
2015년 10월 25일에 00:00에서 22:59:59 사이에 수정된 파일을 제공할 것으로 예상했지만 간단한 테스트(findutils 4.4.2 사용)를 수행하면 01:00에서 22:59:59 사이에 수정된 첫 번째 파일을 반환하는 것으로 나타났습니다. 23:59:59(시간 변경 전에 실행하지 않는 경우)
$ find . -printf '%TFT%TT %p\n'
2015-09-25T14:28:25.4868761490 .
2015-10-25T00:02:00.0000000000 ./a
2015-10-25T23:43:00.0000000000 ./c
2015-10-25T12:42:00.0000000000 ./b
$ NO_FAKE_STAT=1 faketime -m '2015-10-25 12:23' find . -daystart -mtime 0
./c
./b
$ NO_FAKE_STAT=1 faketime -m '2015-10-25 00:32' find . -daystart -mtime 0
./a
./b
$ NO_FAKE_STAT=1 faketime -m '2015-10-25 12:23' find . -daystart -mtime 1
./a
아무리 선언해도따라서 어제 수정된 홈 디렉토리의 일반 파일을 나열하려면위의 내용이 항상 사실은 아닙니다.
그렇지 않은 경우 -daystart
24시간 간격으로 수정된 파일을 확인합니다. 따라서 2015년 10월 25일에 실행하면 12:43
2015 find . -mtime 0
년 10월 24일 13시 43분부터 현재까지 수정된 파일을 받게 됩니다.
어제 마지막으로 수정된 파일을 제공하는 보다 안정적인 방법은 다음과 같습니다.
find . -newermt 'yesterday 0' ! -newermt 'today 0'
여기에는 어제 해당 시간의 파일이 아니라 오늘 00:00:00.0000000000에 마지막으로 수정된 파일이 포함됩니다. 불행히도 술어가 없습니다 -oldermt
.
glob에서 zsh
사용되는 함수는 age
다음과 같습니다.
$ autoload age # in ~/.zshrc
$ ls -ld -- *(age,yesterday,)
비슷한 문제가 있습니다.