Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

Bash로 특정 기간보다 오래된 파일 자동 삭제하기 [실전 예제]

이 글에서는 지정한 일수(또는 시간/분)보다 오래된 파일을 수동으로 또는 Bash 스크립트를 통해 자동으로 삭제하는 방법을 소개합니다. 실제 활용 가능한 예제도 함께 담았습니다.

일정 기간보다 오래된 파일(분, 시간 단위 포함)을 삭제하려면 리눅스의 두 가지 핵심 명령어인 rmfind를 조합해 사용합니다.

rm 명령어로 파일 삭제하기

먼저 rm 명령어부터 살펴보겠습니다. rm(remove)은 리눅스에서 파일과 디렉터리를 삭제할 때 사용하는 기본 명령어입니다. 다양한 옵션과 사용법이 궁금하다면 관련 문서를 참고하는 것도 좋습니다.

find 명령어로 파일 목록 필터링하기

두 번째 요소는 find 명령어입니다. find는 다양한 조건에 맞는 파일을 검색하는 도구로, 여기서는 파일의 수정 시간(마지막으로 수정된 후 경과한 시간)을 기준으로 파일을 찾는 데 사용합니다.

두 명령어 조합하기 – 실전 예제

findrm을 함께 사용하면 다음과 같습니다:

find /path/to/files/* -mtime +7 -exec rm {} \;

이 명령어가 어떻게 동작하는지 하나씩 살펴보겠습니다.

  • find/path/to/files 디렉터리를 대상으로 실행됩니다.
    • -mtime +7 옵션은 7일보다 더 오래 전에 수정된 파일만 찾으라는 의미입니다.
    • -exec 옵션은 검색된 각 파일에 대해 실행할 명령어를 지정합니다.
  • rm-exec 옵션에 의해 호출됩니다.
    • find가 찾은 조건에 맞는 모든 파일을 삭제합니다.
    • 명령 끝의 중괄호({}), 백슬래시(\), 세미콜론(;)은 find가 각 파일에 대해 실행할 명령어의 끝을 표시하는 기호입니다.

일 단위 대신 시간·분 단위로 삭제하기

시간 단위를 일(day) 대신 분(minute)으로 바꾸고 싶다면 -mtime 대신 -mmin을 사용하면 됩니다.

find /path/to/files/* -mmin +30 -exec rm {} \;

위 예제는 30분보다 오래된 파일을 모두 삭제합니다. 시간 단위가 필요하다면 분 값으로 환산하면 됩니다(예: 3시간 → 180분).

삭제 작업을 스크립트로 만들기

명령어를 매번 직접 입력하는 대신, 스크립트 파일로 만들어 두면 훨씬 편리합니다.

#!/bin/bash

find /path/to/files/* -mtime +7 -exec rm {} \;

위 코드를 파일로 저장합니다(예: deletescript.sh). 그다음 아래와 같이 실행할 수 있습니다:

./deletescript.sh

실행 전에 chmod +x deletescript.sh로 실행 권한을 부여해야 한다는 점을 잊지 마세요. 어디서든 호출하고 싶다면 별칭(alias)을 등록하는 방법도 있습니다.

cron으로 오래된 파일 삭제 자동화하기

일정한 주기마다 자동으로 실행되길 원한다면 crontab에 등록하면 됩니다. crontab은 리눅스에서 사용자의 예약 작업을 관리하는 파일로, 다음 명령어로 편집할 수 있습니다:

crontab -e

명령어를 실행하면 crontab 편집 화면이 열립니다. 매일 스크립트를 실행하려면 파일 끝에 다음 내용을 추가하세요:

@daily find /path/to/files/* -mtime +7 -exec rm {} \;

@daily는 매일 자정에 작업을 실행한다는 의미입니다. 필요에 따라 @hourly(매시간)나 @weekly(매주) 등으로 변경할 수 있으며, 로그 파일 정리나 임시 파일 관리 같은 반복 작업에 특히 유용합니다.