"find .-daystart -mtime"과 "find .-mtime"의 차이점은 무엇입니까?

"find .-daystart -mtime"과 "find .-mtime"의 차이점은 무엇입니까?

다음의 차이점은 무엇입니까 -

find . -daystart -mtime +5

그리고

find . -mtime +5

테스트해 보니 동일한 결과가 나왔습니다.

그것을 사용하면 어떤 이점이 있습니까 -daystart? 이분야 초보인데 친절한 조언 부탁드립니다.

답변1

기준점이 현재 시간( find런타임)이 아닌 자정이 되도록 파일 수명을 비교하는 방식을 변경합니다.

예를 들어 지금은 2022년 7월 8일 오전 11시 12분경입니다. 다음 파일을 고려하십시오.

$ touch -d '2022-07-08 09:00' this_morning                #       2 h old
$ touch -d '2022-07-07 23:55' yesterday_before_midnight   #      11 h old
$ touch -d '2022-07-07 09:00' yesterday_morning           # 1 d + 2 h old

-mtime 0하루 종일 문서를 작성하지 않습니다. 기본적으로 현재 시간과 비교하여 지난 24시간의 기간을 제공합니다.

$ find . -type f -mtime 0
./yesterday_before_midnight
./this_morning

이를 통해 -daystart달력 날짜를 보는 것과 비슷합니다. -daystart -mtime 0"0일 전" 파일이 주어지면, 즉 오늘부터 시작됩니다:

$ find . -type f -daystart -mtime 0
./this_morning

마찬가지로, 최소한 "1일"(즉, 24시간 이상)이 지난 파일의 경우:

$ find . -mtime +0
./yesterday_morning

그리고 어제 또는 그 이전에:

$ find . -daystart -mtime +0
./yesterday_before_midnight
./yesterday_morning

이를 확인하는 또 다른 방법은 -daystart파일 타임스탬프와 현재 시간 사이의 자정 수를 계산하는 것입니다.

( ) 수정자는 "엄격히 큼"("보다 작음")을 의미하며 /에 대한 규칙은 find가 파일 수명의 24시간 기간 수를 계산하고 모든 소수 부분을 제거한다는 것입니다. 따라서 궁극적인 의미는 '적어도 0'이 아니라 '적어도 하나'입니다.+N-N-atime-mtime+0

POSIX 설명은 -mtime다음과 같습니다.

-m시간 N
파일 수정 시간을 초기화 시간에서 빼고 86400으로 나눈 경우(나머지는 모두 폐기됨) 기본 용어는 true로 평가되어야 합니다.N.

따라서 기본 타임라인( 제외 -daystart)은 다음과 같습니다.

...-|-- age 2 days --|-- age 1 day ---|-- age 0 days --|
    ^                ^                ^                ^
  72 h ago        48 h ago         24 h ago          current time

이를 통해 -daystart기준점은 자정으로 이동합니다.

...-|-- age 2 days --|-- age 1 day ---|-- age 0 days --|
    ^                ^                ^                ^
  start of         start of        last midnight /    next midnight /
  the day before   yesterday       start of today     end of today
                  

(미래에 파일에 대한 음수 시간을 얻을 수 있지만 빼기 기호는 다른 의미를 갖기 때문에 직접 지정할 수는 없습니다. 하지만 이를 사용할 수 있으며 -mtime -0나중에 수정된 파일을 제공 -daystart -mtime -0하거나 내일 또는 나중에 수정된 파일을 제공하세요.)

공교롭게도 / 와 함께 작업하면 -daystart하루가 끝날 때부터 계산이 시작됩니다.-amin-mmin

$ touch -d '12:00' today_1200.txt   # noon today
$ touch -d '23:00' today_2300.txt   # late evening today
$ find . -type f -daystart -mmin +120 
./today_1200.txt
$ find . -type f -daystart -mmin -120
./today_2300.txt
$ find . -type f -daystart -mmin -$((13*60))
./today_2300.txt
./today_1200.txt

(23:00은 하루 종료로부터 120분 이내이고, 12:00은 하루 종료로부터 120분 이상입니다. 둘 다 하루 종료로부터 13*60분 이내입니다.)

이것매뉴얼 페이지물론 -daystart:

시간은 24시간 전이 아닌 오늘부터 측정됩니다.

이것은 다소 이상한 표현처럼 들립니다. 그들은 하루 종일 기한을 제시하지만 표현을 보면 제로 기준점을 나타내는 것처럼 들립니다. 기본적으로 이 시간은 현재 시간이 되며 -daystart위에서 언급하고 표시된 대로 오늘의 끝으로 이동됩니다. 그래서 내 생각에는 "현재 시간이 아닌 오늘의 끝부터 시간을 측정한다"는 표현이 더 명확합니다.

관련 정보