UNIX 명령 find
을 사용하여 특정 날짜에 작성된 파일을 검색 하려면 어떻게합니까 ?
UNIX 명령 find
을 사용하여 특정 날짜에 작성된 파일을 검색 하려면 어떻게합니까 ?
답변:
Max가 지적한 것처럼, 할 수는 없지만 수정되거나 액세스 된 파일을 확인하는 것이 그렇게 어려운 것은 아닙니다. 나는 오늘 늦게 이것에 대한 자습서 를 썼습니다 . 사용의 본질은 다음 -newerXY
과 ! -newerXY
같습니다.
예 : 2007 년 6 월 7 일에 수정 된 모든 파일을 찾으려면 다음을 수행하십시오.
$ find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08
2008 년 9 월 29 일에 액세스 된 모든 파일을 찾으려면 다음을 수행하십시오.
$ find . -type f -newerat 2008-09-29 ! -newerat 2008-09-30
또는 같은 날에 권한이 변경된 파일 :
$ find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30
파일에 대한 권한을 변경하지 않으면 'c'는 일반적으로 작성 날짜와 일치합니다.
-newerBt
파일의에 일치 탄생 (창조) 시간.
-newerxt
볼 수 있습니다 FreeBSD의 (가 처음 제공 한 2001 년 이후 패치로 1998 년), 몇 가지 다른 BSD의와 GNU 찾기 도입 HP / UX의 발견을 기반으로, (2007 년 4.3.3 이후) -newerXY
(단, Y == t는 지원되지 않습니다).
find location -ctime time_period
time_period의 예 :
30 일 이상 전에 : -ctime +30
30 일 전 : -ctime -30
정확히 30 일 전 : -ctime 30
ctime
생성 시간 과 관련이 없으며 inode 변경 시간입니다.
두 단계이지만 다음과 같이하고 싶습니다.
먼저 특정 날짜 / 시간으로 파일을 작성하십시오. 이 경우 파일은 자정에 2008-10-01입니다.
touch -t 0810010000 /tmp/t
이제 우리는 위의 파일보다 최신이거나 오래된 모든 파일을 찾을 수 있습니다 (파일 수정 날짜 기준). -anewer 를 사용 하여 액세스하고 -cnewer 파일 상태를 변경할 수도 있습니다.
find / -newer /tmp/t
find / -not -newer /tmp/t
터치하여 두 파일을 만들어 특정 날짜 사이의 파일을 볼 수도 있습니다.
touch -t 0810010000 /tmp/t1
touch -t 0810011000 /tmp/t2
이것은 두 날짜와 시간 사이에 파일을 찾을 것입니다
find / -newer /tmp/t1 -and -not -newer /tmp/t2
find
을 위한 해결책에 +1-newerXY
당신은 이것을 할 수 있습니다 :
find ./ -type f -ls |grep '10 Sep'
예:
[root@pbx etc]# find /var/ -type f -ls | grep "Dec 24"
791235 4 -rw-r--r-- 1 root root 29 Dec 24 03:24 /var/lib/prelink/full
798227 288 -rw-r--r-- 1 root root 292323 Dec 24 23:53 /var/log/sa/sar24
797244 320 -rw-r--r-- 1 root root 321300 Dec 24 23:50 /var/log/sa/sa24
stat
당신이없는 경우 find -printf
.
당신은 할 수 없습니다. -c 스위치는 사용 권한이 마지막으로 변경된시기를 알려주고 -a는 가장 최근 액세스 시간을 테스트하며 -m은 수정 시간을 테스트합니다. 대부분의 Linux 버전 (ext3)에서 사용하는 파일 시스템은 "작성 시간"레코드를 지원하지 않습니다. 죄송합니다!
@Max : 생성 시간이 맞습니다.
당신이 중 하나에 대한 경과 일 인수를 계산하려는 경우에는, -atime
, -ctime
, -mtime
매개 변수는 다음과 같은 표현을 사용할 수 있습니다
ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
"2008-09-24"를 원하는 날짜로 바꾸면 ELAPSED_DAYS가 그 때부터 오늘까지의 일 수로 설정됩니다. (업데이트 : 결과에서 하나를 빼서 find
날짜 반올림 에 맞 춥니 다 .)
따라서 2008 년 9 월 24 일에 수정 된 파일을 찾으려면 명령은 다음과 같습니다.
find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
버전이 @Arve :의 답변에 언급 된 술어를 find
지원하지 않는 경우 작동합니다 -newerXY
.