'찾기'를 사용하여 특정 날짜에 작성된 파일을 검색하는 방법은 무엇입니까? [닫은]
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 등의 매개 변수를 찾는 것이 여기에 도움이 될 것이라고 생각합니다.
'IT story' 카테고리의 다른 글
Chrome 양식 자동 완성 및 노란색 배경 (0) | 2020.04.07 |
---|---|
MySQL SELECT 만 null 값이 아닙니다 (0) | 2020.04.07 |
XPath를 통해 속성 노드 값 추출 (0) | 2020.04.07 |
jQuery는 초점 이벤트를 잃는다 (0) | 2020.04.07 |
Mac OS X의 파일에서 "확장 된 속성"을 제거하려면 어떻게합니까? (0) | 2020.04.07 |