리눅스에서 특정 확장자 또는 특정 파일명을 가진 여러 디렉토리 안의 파일을 일괄적으로 삭제하려면 find 명령어를 이용하면 됩니다.

find 명령어는 디렉토리 안에 있는 파일을 검색하는 명령어로 특정 조건을 지정해서 파일을 검색할 수 있는데요.

find 명령어와 파일을 삭제하는 명령어인 rm 을 조합해서 특정 확장자 또는 특정 이름이 들어간 파일명을 검색하고 검색결과로 나온 파일을 삭제하는 방식으로 조건에 부합하는 파일을 일괄적으로 삭제할 수 있습니다.

rm으로 파일, 확장자 일괄 삭제하기

디렉토리 안의 특정 확장자 일괄 삭제 명령어

하나의 디렉토리 안에 있는 특정 확장자를 삭제하려면 find 명령어를 사용하지 않아도 됩니다.

rm *.jpg
rm -f /home/user/*.tar.bz2

위와 같이 별표(*)를 이용해 특정 확장자를 와일드카드로 지정하면 해당 확장자를 가진 파일만 삭제할 수 있습니다.

디렉토리 지정 없이 사용하면 현재 위치한 디렉토리 내의 파일을 삭제하며 디렉토리 경로 뒤에 붙여서 와일드카드와 함께 확장자를 지정하면 해당 디렉토리 내에 있는 파일에서 해당 확장자를 일괄 삭제합니다.

-f 명령어 옵션을 함께 사용하면 삭제 확인 메시지를 건너뛰고 파일을 삭제하므로 일괄 삭제시 사용하면 편리한 옵션입니다.

디렉토리 안의 특정 파일명 일괄 삭제 명령어

파일명에 특정 문자가 들어가는 파일을 일괄 삭제하고 싶다면 다음과 같은 문법을 이용합니다.

rm *picture*.*

첫번째 예제는 현재 위치한 디렉토리 하위에 있는 파일 중 파일명에 picture가 포함되어 있는 모든 확장자를 삭제하는 명령어입니다.

rm /home/user/*thumb*.jpg

두번째 예제는 디렉토리 경로를 지정해서 해당 디렉토리 안에 있는 파일 중 thumb가 들어간 jpg 파일을 일괄 삭제하는 명령어입니다.

rm 명령어와 와일드카드를 조합하는 명령어 방식은 해당 디렉토리 하위에 여러 디렉토리가 있는 경우 이 명령어를 매번 실행해야하는 번거로움이 있습니다.

하위 디렉토리에 있는 특정 확장자, 특정 파일 일괄 삭제하기

리눅스 커맨드에서 현재 디렉토리 또는 절대경로를 지정한 후 해당 디렉토리 하위의 여러 디렉토리에서 특정 파일을 일괄 삭제하려면 서두와 같이 find 명령어를 함께 사용합니다.

Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

find의 명령어 syntax 입니다. 파일을 삭제하는 명령어 rm을 함께 사용하기 위해서 exec 옵션을 사용합니다.

디렉토리 하위에 있는 모든 확장자를 삭제하는 명령어

find . -type f -name"*.jpg" -exec rm {} \;

현재 디렉토리 하위에 있는 jpg 확장자를 가진 파일을 하위 디렉토리 안에 있는 파일까지 일괄 삭제하는 명령어 예제입니다.

디렉토리 하위에 있는 특정 파일명을 모두 삭제하는 명령어

find /var/www/ -type f -name "*thumb*" -exec rm {} \;

/var/www 디렉토리 하위에 있는 모든 파일 중에서 thumb 이름이 들어간 파일을 삭제하는 명령어입니다.

디렉토리 하위에 있는 파일 중 생성(변경)된지 7일 이상 된 파일 모두 삭제하는 명령어

find /etc/cache/ -ctime +7 -type f -exec rm {} \;

-ctime 옵션은 파일이 마지막으로 변경된 날짜와 시간을 체크하는 명령어로 파일이 생성되거나 파일 속성 및 데이터가 변경된 경우 갱신됩니다.

/etc/cache 디렉토리 하위에 있는 파일 중 생성된지 7일 이상 된 캐시 파일을 모두 삭제하는 명령어로 다른 옵션을 응용해서 활용할 수 있습니다.

  • -atime 파일에 마지막으로 접근한 날짜와 시간
  • -mtime 파일이 마지막으로 수정된 날짜와 시간

위 명령어를 이용해서 batch 파일을 만든 다음 크론탭에 등록하면 주기적으로 자동 삭제를 할 수 있습니다.

Write A Comment