Linux : find를 사용하여 <date>보다 오래된 파일 찾기


31

findX 일 전보다 더 수정 된 파일을 찾을 수 있도록 지원하지만 find특정 날짜 이후에 수정 된 모든 파일을 찾으려면 어떻게 해야합니까?

find맨 페이지에서 다른 파일 시간과 비교하거나 생성 된 시간과 현재 시간의 차이점을 확인하기 위해 아무것도 찾을 수 없습니다 . 원하는 시간으로 파일을 만들고이를 수행하는 유일한 방법과 비교합니까?


1
이것은 SuperUser.com에서 더 잘 물어볼 것입니다
Josh Brower

6
나는 이것을 닫지 않을 것입니다 : sysadmins에게도 흥미로울 수 있습니다.
splattne

이 명령은 백업 스크립트의 일부로, 야간 백업에서 설치 후 변경된 변경된 / etc의 모든 항목을 가져옵니다.
DrStalker

9 살이되었고 나는 새로운 답변을 검토 할 때이 질문의 제목과 본문이 같지 않다는 것을 알게되었습니다. 제목은 '<날짜>보다 오래된 파일'을 요구하지만 본문에는 '일정 날짜 후에 수정 됨'이 있습니다. 나는 '후'를 특정 날짜보다 더 오래된 것으로 해석합니다.
Joffrey

답변:


19

'최신 파일'만있는 경우이 해결 방법을 사용할 수 있습니다.

touch -t 201003160120 some_file
find . -newer some_file

남자 터치 :

  -t STAMP
          use [[CC]YY]MMDDhhmm[.ss] instead of current time

터치에이 옵션이 있다고 가정합니다 (광산은 터치 5.97입니다).


48

아니요, 날짜 / 시간 문자열을 사용할 수 있습니다.

보낸 사람 man find:

-newerXY reference
현재 파일의 타임 스탬프를 참조와 비교합니다. 참조 인수는 일반적으로 파일 이름이며 타임 스탬프 중 하나가 비교에 사용되지만 절대 시간을 설명하는 문자열 일 수도 있습니다. X와 Y는 다른 문자의 자리 표시 자이며이 문자는 비교에 참조가 사용되는 방법에 속하는 시간을 선택합니다.

          a   The access time of the file reference
          B   The birth time of the file reference
          c   The inode status change time of reference
          m   The modification time of the file reference
          t   reference is interpreted directly as a time

예:

find -newermt "mar 03, 2010" -ls
find -newermt yesterday -ls
find -newermt "mar 03, 2010 09:00" -not -newermt "mar 11, 2010" -ls

5
GNU find 버전 4.2.27을 사용하는 Centos 5.2를 사용하고 있으며 -newermt 또는 "-newer file"이외의 -newer 매개 변수를 지원하지 않습니다
DrStalker


25

질문과 직접 ​​관련이 없지만 여기에서 우연히 발견되는 일부에게는 흥미로울 수 있습니다.

find 명령은 필요한 날짜보다 오래된 파일을 찾기 위해 -older 매개 변수를 직접 지원하지 않지만 허용 된 응답 예제를 사용하여 부정 문을 사용할 수 있습니다.

touch -t 201003160120 some_file
find . ! -newer some_file

제공된 날짜보다 오래된 파일을 반환합니다 .


3
편집자-아마도 대답으로 합쳐 져야할까요?
nEJC

이 솔루션은 이런 종류의 문제를 해결하는 가장 우아한 방법입니다 :)
Labynocle

9
find <dir> -mtime -20

이 find 명령은 지난 20 일 이내에 수정 된 파일을 찾습니다.

  • mtime-> 수정 됨 (atime = accessed, ctime = created)
  • -20-> 20 일 미만 (20 정확하게 20 일, 20 일 이상 +20)

다음과 같은 추가 제한을 추가 할 수 있습니다.

find <dir> -mtime -20 -name "*.txt"

이전과 동일하지만 '.txt'로 끝나는 파일 만 찾습니다.


5

추가하기 위해-두 개의 최신 인수를 사용하여 시간 간격으로 검색 할 수도 있습니다.

find ! -newermt "apr 01 2007" -newermt "mar 01 2007" -ls

2007 년 3 월의 모든 파일을 찾을 수 있습니다.


1

이런 스크립트를 사용할 수 있습니다

#!/bin/bash

if [ $# -ne 1 ];then
  when="today"
else
  when=` date -d "$1" +"%s" `
fi
now=`date +"%s"`

seconds=`echo "$when - $now" | bc`
minutes=`echo "$seconds / 60 " | bc `

find . -cmin $minutes -print

$ PATH에 "newerthan"으로 저장하고 실행 가능하게 만드십시오.

그런 다음 특정 날짜 이후에 수정 된 파일을 찾을 수 있습니다.

newerthan "2010-03-10"

또는

newerthan "last year"

또는

newerthan "yesterday"

그것은 당신이 원하는 것을해야합니다. 나는 그렇지 않으면 이것을 달성 할 수있는 방법이 내장되어 있다고 생각하지 않습니다.


그것은 사용할 필요는 없습니다 bc정수 연산을 위해, 배쉬는 작업을 수행 할 수 있습니다 ((seconds = when - now)), 형식 인수를 위해 date플러스가 있어야 date +%s하지 수 있으며 일부 시스템date -d
일시 중지 추후 공지가있을 때까지합니다.

Centos 5.2 용입니다. -d가 있습니다. 정수 수학에 대해 아는 데 유용합니다.
Richard Holloway

1
find ! -newermt “<DATE>”

이처럼 :

find ! -newermt “jan 01 2015” 

현재 디렉토리에 01-01-2015 이전의 파일이 표시됩니다.

https://muzaffarmahmoodblog.wordpress.com/2019/07/11/linux-command-to-remove-files-older-than-2015-in-a-directory/


나는 ServerFault에 대해 당신을 환영하고 질문 제목과 본문이 다른 것을 말할 때까지 중복 답변 포즈를 재고하도록 요청하려고했습니다. 제목은 '<date>보다 오래된 파일을 요구합니다. 내 생각에는 두 가지 다른 것이 있습니다. 어쩌면 당신의 게시물에서 차이점을 분명히하고 부정의 사용을 설명 할 수 있습니다. 기여해 주셔서 감사합니다. 명확하게하기 위해 질문에 대한 의견을 게시하겠습니다. 기여해 주셔서 감사합니다!
Joffrey

0

날짜가 비교할 수 있도록 형식이 지정된 경우,

mydate=201003160120
find . -type f -printf "%AY%Am%Ad%AH%AM%AS/:%p\n" | awk -vd="$mydate" -F'/:' '$1 > d{ print $2 }'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.