source

'찾기'를 사용하여 특정 날짜에 작성된 파일을 검색하려면 어떻게 해야 합니까?

gigabyte 2023. 4. 19. 23:08
반응형

'찾기'를 사용하여 특정 날짜에 작성된 파일을 검색하려면 어떻게 해야 합니까?

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'는 작성 날짜에 해당합니다.

하여 파일 및 합니다./home/필요에 따라 기간을 추가합니다.

find /home/ -ctime time_period

time_period의 예:

  • 전: 30일 전:-ctime +30

  • : 30일 전:-ctime -30

  • 전 : 정 30일30 일 :-ctime 30

두 단계지만 이렇게 하는 것이 좋습니다.

먼저 특정 날짜/시간을 가진 파일을 만듭니다.이 경우 파일은 2008-10-01 자정입니다.

touch -t 0810010000 /tmp/t

이제 위의 파일보다 최신 파일 또는 오래된 파일(파일 수정 날짜 기준)을 모두 찾을 수 있습니다.
액세스된 파일 상태 및 변경된 파일 상태에 대해 -anewer를 사용할 수도 있습니다.

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"를 원하는 날짜로 대체하면 EXCIDS_DAYS가 오늘까지의 일수로 설정됩니다.(갱신: 결과에서 1을 빼서 일치시킵니다.find의 날짜 반올림).

따라서 2008년 9월 24일에 변경된 파일을 찾으려면 다음 명령을 사용합니다.

find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))

이것은, 사용의 버전이find를 지원하지 않습니다.-newerXY@Arve:의 답변에 기재되어 있는 술어.

-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

반응형