특정 날짜 이전에 생성 된 모든 파일 제거


26

나는 많은 파일을 포함하는 디렉토리를 가지고 있습니다 (연중 매일 로그와 같은). 22/11 이전에 작성된 모든 파일을 제거하고 싶습니다. 어떻게하면 되나요? find그런 다음 exec를 사용해야 -rm합니까? ksh를 사용하고 있습니다.


1
일반적인주의 사항은 Unix 파일 시스템에는 일반적으로 파일을 만든 시간에 대한 기록이 포함되어 있지 않으며 inode와 내용이 마지막으로 수정 된 시간 만 사용할 수 있다는 것입니다.
Toby Speight

답변:


35

사용하는 find것이 여전히 파일을 삭제하는 기본 방법입니다. 자세한 내용은 http://mywiki.wooledge.org/UsingFind 를 참조 하십시오 .

이를 수행하는 한 가지 방법은 타임 스탬프가있는 파일을 만드는 것입니다. 예 :

touch -t 201311220000 /tmp/timestamp

이제 find타임 스탬프와 일치하는 GNU 파일 (현재 디렉토리에 있다고 가정)을 삭제하십시오 . 예 :

find . -type f ! -newer /tmp/timestamp -delete  

또는 GNU 이외의 찾기

find . -type f ! -newer /tmp/timestamp -exec rm {} \;

2
이건 어때? 작동합니까 ? 찾기 유형 f -mtime +5 -exec rm -f {} \;
user1058398

1
@ user1058398 그러면 5 일이 지난 파일이 삭제됩니다.
Valentin Bajrami

파일과 함께 폴더도 삭제합니까? @ val0x00ff
alper

1
@Avatar no type -f는 작업을 파일로만 제한 하기 때문 입니다.
Valentin Bajrami

22

GNU 또는 일부 BSD 사용시 find:

find . ! -newermt 2013-11-22 ! -type d -delete

파일의 마지막 수정 시간을 확인합니다. 일부 BSD의에서, 당신은 사용할 수있는 -newerBt대신에 -newermt파일의 아이 노드를 확인하기 위해 출생 대신 가능하면 시간을.


1
find /path/to/directory/ -mtime +<number of days> -name '<file name>' -exec rm -rf {} \;

예:

find /Netap_fileshare_backup/SQL/DB_backups/xeo/ -mtime +15 -name 'ORA_XEO*' -exec rm -rf {} \;

이 경우 15 일 이상 "ORA_XEO"로 시작하는 모든 파일이 제거됩니다.


를 사용하여 더 잘 볼 수 있지만 rm -rf첫 번째 명령은 15 일보다 오래된 디렉토리에 포함 된 모든 것을 제거합니다. (또한, 왜 괄호 안에 -name?)
ilkkachu

당신이 옳습니다, 우리는 "(" ")"를 넣을 필요가 없습니다.
calafate

그러나 조건을 추가하려면 유용 할 수 있습니다. 예를 들어 ".jar"또는 ".cp"로 끝나는 모든 파일을 제거하고 "ex"로 시작하려면 example.jar-제거 될 것입니다-제거 될 것입니다 example.cp-제거 example.tar되지 않을 것입니다
calafate

이 경우 다음을 사용할 수 있습니다.find /path/to/directory/ -mtime +<number of days> \( -name '*.jar' -o -name '*.cp' \) -name 'ex*' -exec rm -rf {} \;
calafate

정확히 자정에 실행하고 1 초 이내에 완료되지 않으면 <일 수> 보다 오래된 모든 파일이 아닌 <일 수> 에서 일부 파일이 제거됩니다 . GNU 에서는 수정자를 사용 하여 값을 자정 으로 강제 변환해야합니다. find-daystart-mtime
roaima
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.