무기는 끈기

[Linux / 리눅스] 리눅스 명령어 find 활용하여 30일 넘은 파일 제거하기 본문

Hacking

[Linux / 리눅스] 리눅스 명령어 find 활용하여 30일 넘은 파일 제거하기

김유비야 2024. 4. 5. 09:37


find 는 리눅스에서 파일 또는 디렉토리를 찾아주는 명령어 입니다.

특정 조건을 붙여 원하는대로 찾아서 특정 행동을 취할수도 있습니다.

 

find [옵션] [경로] [표현식]

# 현재 위치에서 log가 들어가는 파일 모두 찾기
find . -name "*log*"



type을 정해줄 수도 있고, 수정된 마지막 날짜를 찾을수도 있습니다.

시스템 진단을 하기 위해선 기본적으로 알아야 하는 명령어로 주로 오래 사용되지 않는 파일이나 디렉토리를 찾아 제거하여 위험을 방지하는 용도로 추측됩니다.

 

일정기간이 지난 파일을 삭제하고 싶은 경우에 사용할 수 있는 구조는 아래와 같다.

상황에 따라 사용하는 함수가 다르기에 잘 구분하여 활용해야 합니다.

일정기간 지난 파일 삭제 명령 - 1일 지난 파일 삭제 예 
find [디렉토리] -ctime +0 -exec rm -f {} \;
 
일정기간 지난 파일 삭제 명령 - 7일 지난 파일 삭제 예 
find [디렉토리] -ctime +7 -exec rm -f {} \;


수정한지 3일 이내 ( -mtime -3 ) 의 파일만 ( 백업할 때 유용 )
find . -mtime -3 -type f -ls

수정한지 30분 이내 ( -mmin -30 ) 의 파일만
find . -mmin -30 -type -f -ls
 

특정용량 이상되는 파일 찾기 - 10MB 이상 되는 파일 찾기 예
find [디렉토리] -size +1000k -exec ls -al {} \;

생산된지 30일 이상 된 파일만 삭제
find [디렉토리] -type f -ctime +30 -exec rm -rf {} \;

생산된지 30일 이상 된 비어있는 디렉토리만 삭제
find [디렉토리] -empty -type d -ctime +30 -exec rmdir {} \;
※ 리눅스 버전에 따라 -ctime 이 먹지 않는 경우가 있다. 이때는 -mtime 으로 대체한다 (의미는 다르지만....)

현재 디렉토리( . ) 이하에 확장자가 .html ( -name "*.html" ) 인 파일만 ( -type -f ) 
find . -name "*.html" -type f -ls
현재 디렉토리 이하에서 확장자가 .php 인 파일만 삭제하기
find . -name '*.php' -exec rm -f {} \;

파일크기가 300KB 이상 ( -size +300k ) 인 파일만 (호스팅 되는 홈피내에 큰 사이트의 파일이 있는지 찾을 때 유용)
find . -size +300k -ls

파일크기가 500bytes 이하 ( -size -500c )인 파일만
find . -size -500c -ls

수정한지 20일 이상 ( -mtime +20 ) 된 파일과 디렉토리
find . -mtime +20 -ls

수정한지 20일 이상된 파일만
find . -mtime +20 -type f -ls

수정한지 20일 이상된 파일만 삭제 ( -exec rm {} \; ) ( 정기적으로 20일지 지난 파일을 삭제할 때 유용 )
find . -mtime +20 -type f -ls -exec rm {} \;

* 출처: http://www.telepasi.co.kr/post/135