2012-04-16 3 views
0

디렉토리에 매일 생성되는 파일이 있습니다. 파일 형식 (2012 년 4 월 16 일에 생성 된 파일 형식이 TEST_20120416 인 경우).CreationTime을 기반으로 파일 삭제

그래서 7 일이 넘은 파일을 모두 삭제해야합니다. 나는 (파일 이름은 타임 스탬프를 가지고) 파일 이름에 따라 파일을 삭제 나를 도와 time.Kindly

#!/bin/ksh 
find /data/Test/*.* -mtime -7 -exec rm -rf {} \; 
exit 0 

지금 문제가 코드에 이상이 수정 시간에 따라 및 삭제되지만 요구 사항 파일에 따라하는 것은 창조를 기반으로 삭제해야하고 시도 . 당신은 다행히 작성 날짜가 파일 이름으로 인코딩 것처럼

+1

[파일 생성 시간 ] 파일 시스템에 따라 [1] [1] : http://stackoverflow.com/questions/5929419/how-to-get-file-creation-date-in-linux – tuxuday

+0

@tuxuday. 실제로 파일 시스템의 대다수는 파일 생성 시간을 추적하지 않습니다. 많은 사람들이 순식간에'ctime'을 "creation time"이라고 해석하지만, 그게 전혀 아닙니다. – twalberg

답변

0

이 작동합니다 :

#!/bin/sh 
REFDATE=$(date --date='-7 days' +%Y%m%d) 
PREFIX=TEST_ 
find /data/Test/ -name $PREFIX\* | while read FNAME; do 
    if [ ${FNAME#$PREFIX} -lt $REFDATE ]; then 
     rm $FNAME 
    fi 
done 

당신이 좀 더 필터링이 필요할 수 있으며,이 경우 TEST_로 시작하는 이름을 가진 다른 파일이있는 경우이 경고를 인쇄합니다.

-1
find /data/Test/*.* -ctime -7 -delete 

'find/data/Test/. '은/data/Test 폴더에있는 모든 파일을 찾고'-ctime -7 '인수는 지난 7 일 동안의 검색 시간을 제한하고 -delete 옵션은 그러한 파일을 삭제합니다.

+1

'-mtime'은 수정 시간을 필터링합니다. 더 나은 선택은'-ctime '일 것입니다. 또한 여기를 참조하십시오 : http://stackoverflow.com/q/10171069/694576 – alk

+2

답변으로 한 라이너를 게시하는 경우 적어도 한두 문장으로 설명합니다. 아무도 자신의 컴퓨터에서 인터넷의 임의 명령을 실행하지 않습니다. –

+0

좋아, 내 잘못이야. /data/Test/*.*는/data/Test 폴더에있는 모든 파일을 찾고 인수 -ctime -7은 지난 7 일 동안의 생성 시간으로 검색을 제한하고 -delete 옵션은 그러한 파일을 삭제합니다. –