2011-02-28 2 views
7

0 일 전의 파일을 찾으려고합니다. 아래 테스트를 수행하기 위해 수행 한 단계는 다음과 같습니다."find command -mtime 0"내가 예상 한 파일을 가져 오지 않습니다.

$ ls 
$ ls -ltr 
total 0 
$ touch tmp.txt 
$ ls -ltr 
total 0 
-rw-r----- 1 tstUser tstUser   0 Feb 28 20:02 tmp.txt 
$ find * -mtime 0 
$ 
$ find * -mtime -1 
tmp.txt 
$ 

왜 '-mtime 0'이 파일을 가져 오지 못합니까?

'-mtime 0'과 '-mtime -1'의 정확한 차이점은 무엇입니까?

유닉스에서는 0 일 전의 파일을 찾을 수있는 다른 방법이 있어야하지만이 '-mtime'이 실제로 어떻게 작동하는지 이해하는 데는 기이합니다.

답변

5
-mtime n 
      File's data was last modified n*24 hours ago. See the comments 
      for -atime to understand how rounding affects the interpretation 
      of file modification times. 

그래서, -mtime 0과 동일한 것 ". 마지막 0 시간 전에 수정 된 파일의 데이터 -mtime 1이 될 것이다 동안 :"파일의 데이터가 마지막 24 시간 전에 수정 된 "

편집 :

Numeric arguments can be specified as 

    +n  for greater than n, 

    -n  for less than n, 

    n  for exactly n. 

그래서 나는 일이 정확히 하나의 날이 될 것입니다 동안 -1, 지난 24 시간 내에 수정 될 것 같아요

+0

어떻게 '-mtime 0'이 유용할까요? –

+0

좋은 질문입니다. 한 시간 내에 변경된 파일을 찾을 수 있습니다. 적어도 나는 그것이 할 것이라고 생각합니다. 나는 이것을 실제로 확인하지 않았다. – veiset

6

이것은의없는 사용자 친화적 인 측면이다.- 일치가 실제로 검색 기준을 올바르게 정의하는 방법을 이해해야합니다. 다음 설명은 GNU find (findutils) 4.4.2를 기반으로합니다.

find 테스트 -atime, -ctime, 24 개 시간 기간에 -mtime 일, 그러므로 이제

floor (current_timestamp - file_modification_timestamp/86400) 

을 감안할 때 세 개의 파일이 1 시간 전 25 시간 전 수정 된 "파일의 시대"를 정의 할 수와 전 49시간

$ touch -t $(date -d "1 hour ago" +"%m%d%H%M") a.txt 
$ touch -t $(date -d "25 hours ago" +"%m%d%H%M") b.txt 
$ touch -t $(date -d "49 hours ago" +"%m%d%H%M") c.txt 

파일 세 (상기 정의 된 바와 같은)

$ echo "($(date +"%s") - $(stat -c %Y a.txt))/86400" | bc 
0 
$ echo "($(date +"%s") - $(stat -c %Y b.txt))/86400" | bc 
1 
$ echo "($(date +"%s") - $(stat -c %Y c.txt))/86400" | bc 
2 
01 아르 23,516,

여기

$ find -type f -mtime 0 # find files with file age == 0, i.e. files modified less than 24 hours ago 
./a.txt 
$ find -type f -mtime -1 # find files with file age < 1, i.e. files modified less than 24 hours ago 
./a.txt 
$ find -mtime 1 # find files with file age == 1, i.e. files modified more than (or equal to) 24 hours ago, but less than 48 hours ago 
./b.txt 
$ find -mtime +1 # find files with file age > 1, i.e. files modified more than 48 hours ago 
./c.txt 

-mtime 0-mtime -1 동등한 결과를 보여줍니다 않습니다 찾을거야, 위의 주어진.

-mmin 동일한 테스트를 세밀하게 제공합니다. 인수는 24 시간 대신 분이됩니다.
N :

나는대로 다음과 같다 find

$ touch tmp.txt 
$ find * -mtime 0 
tmp.txt 
$ find * -mtime -1 
tmp.txt 
0

그 세 가지 가능성의 의미를 상기 버전을 사용하여 문제를 재현 할 수없는거야 정확히 n은 24 시간 기간 (일) 전 0은 오늘을 의미합니다.
+ n : 24 시간 이상 (일) 전, 또는 그 이전 n 시간,
-n : 24 시간 미만 (일) 전 (-n) 이하 또는 n보다 젊음. -1과 0은 같고 둘 다 "오늘"이라는 것을 알 수 있습니다.

참고 : 스크립트에서 find 명령과 함께 매개 변수를 사용하는 경우 -mtime 매개 변수가 0 인 경우주의해야합니다. GNU의 일부 (이전) 버전은 다음 표현을 잘못 해석합니다. Sourece : http://www.softpanorama.org/Tools/Find/index.shtml

관련 문제