GNU 찾기 -[cma] 시간 옵션 및 일광 절약 시간

GNU 찾기 -[cma] 시간 옵션 및 일광 절약 시간

GNU findman에서는 이 옵션에 대해 읽을 수 있습니다 -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

아무리 선언해도따라서 어제 수정된 홈 디렉토리의 일반 파일을 나열하려면위의 내용이 항상 사실은 아닙니다.

그렇지 않은 경우 -daystart24시간 간격으로 수정된 파일을 확인합니다. 따라서 2015년 10월 25일에 실행하면 12:432015 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,)

비슷한 문제가 있습니다.

관련 정보