IT story

'찾기'를 사용하여 특정 날짜에 작성된 파일을 검색하는 방법은 무엇입니까?

hot-time 2020. 4. 7. 08:31
반응형

'찾기'를 사용하여 특정 날짜에 작성된 파일을 검색하는 방법은 무엇입니까? [닫은]


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'는 일반적으로 작성 날짜와 일치합니다.


find location -ctime time_period

time_period의 예 :

  • 30 일 이상 전에 : -ctime +30

  • 30 일 전 : -ctime -30

  • 정확히 30 일 전 : -ctime 30


두 단계이지만 다음과 같이하고 싶습니다.

먼저 특정 날짜 / 시간으로 파일을 작성하십시오. 이 경우 파일은 자정에 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 ./ -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

당신은 할 수 없습니다. -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.


-atime, -ctime 및 -mtime 스위치를 사용하면 원하는 결과를 얻을 수 있습니다.


cp `ls -ltr | grep 'Jun 14' | perl -wne 's/^.*\s+(\S+)$/$1/; print $1 . "\n";'` /some_destination_dir

14 일보다 오래된 모든 파일을 삭제하는 스크립트에서이 스크립틀릿을 발견했습니다.

CNT=0
for i in $(find -type f -ctime +14); do
  ((CNT = CNT + 1))
  echo -n "." >> $PROGRESS
  rm -f $i
done
echo deleted $CNT files, done at $(date "+%H:%M:%S") >> $LOG

나는 약간의 추가 "man find"와 -ctime / -atime 등의 매개 변수를 찾는 것이 여기에 도움이 될 것이라고 생각합니다.

참고 URL : https://stackoverflow.com/questions/158044/how-to-use-find-to-search-for-files-created-on-a-specific-date

반응형