리눅스 find 명령어 완벽 가이드 - 실무에서 바로 쓰는 파일 검색과 일괄 처리

개요

리눅스 환경에서 원하는 파일을 빠르게 찾고 처리하는 것은 서버 관리와 개발의 기본이자 필수 역량입니다. 본 글에서는 find 명령어의 기본 검색 옵션부터 파일 크기·수정 시간 기반 검색, 검색 결과에 대한 일괄 작업(-exec)까지 실습을 통해 단계별로 알아봅니다.

실습 환경 구성 및 파일명 기반 기본 검색

find 명령어 실습을 위한 전용 디렉터리를 생성하고 해당 위치로 이동하기 위해 mkdir -p ~/find_lab/docs ~/find_lab/logs ~/find_lab/backup && cd ~/find_lab 명령어를 실행합니다.

mkdir -p ~/find_lab/docs ~/find_lab/logs ~/find_lab/backup && cd ~/find_lab

검색 테스트에 사용할 다양한 확장자의 샘플 파일들을 생성하기 위해 touch docs/app.log docs/guide.txt logs/error.log logs/access.log backup/data.bak 명령어를 실행합니다.

touch docs/app.log docs/guide.txt logs/error.log logs/access.log backup/data.bak

find 명령어는 지정한 디렉터리 경로 하위의 모든 파일과 디렉터리를 조건에 따라 재귀적으로 검색합니다.
find . -name "*.log" 명령어를 실행하면 현재 디렉터리(.)를 기준으로 확장자가 .log로 끝나는 모든 파일을 찾아 경로와 함께 출력합니다.
이때 와일드카드 문자(*)가 셸에서 먼저 확장되는 것을 방지하기 위해 검색 패턴은 큰따옴표로 감싸서 지정합니다.
⚙️ [주요 옵션]

-name : 대소문자를 구분하여 지정한 파일 이름 또는 패턴과 일치하는 항목을 검색합니다.
-iname : 대소문자를 구분하지 않고 파일 이름 또는 패턴과 일치하는 항목을 검색합니다.
-type : 검색할 파일 유형(f는 일반 파일, d는 디렉터리)을 지정합니다.
-size : 파일 크기를 기준으로 검색합니다(+는 초과, -는 미만).
-mtime : 파일 내용이 수정된 기준 시간(일 단위)을 조건으로 검색합니다.
-empty : 내용이 비어 있는 빈 파일이나 빈 디렉터리를 검색합니다.
-exec : 검색된 각 파일에 대해 지정한 리눅스 명령어를 일괄 실행합니다.
-delete : 검색 조건에 일치하는 파일들을 즉시 삭제합니다.

find . -name “*.log”

대소문자를 구분하지 않고 파일명을 검색하기 위해 -iname 옵션을 사용하여 find . -iname "GUIDE.TXT" 명령어를 실행합니다.
실제 파일명이 소문자인 guide.txt여도 대문자 검색 조건과 일치하여 파일 경로가 정상적으로 검색됩니다.

find . -iname “GUIDE.TXT”

파일 타입과 크기 조건으로 대용량 파일 탐색하기

파일 크기 조건 검색을 테스트하기 위해 15MB 크기의 대용량 샘플 파일을 생성하는 truncate -s 15M ~/find_lab/backup/large_archive.iso 명령어를 실행합니다.

truncate -s 15M ~/find_lab/backup/large_archive.iso

추가적인 크기 비교 실습을 위해 2MB 용량의 로그 샘플 파일을 생성하는 truncate -s 2M ~/find_lab/logs/big_trace.log 명령어를 실행합니다.

truncate -s 2M ~/find_lab/logs/big_trace.log

일반 파일은 제외하고 디렉터리 경로만 필터링하여 검색하기 위해 -type d 옵션을 적용한 find ~/find_lab -type d 명령어를 실행합니다.
지정한 경로 하위에 존재하는 모든 디렉터리 목록만 깔끔하게 출력됩니다.

find ~/find_lab -type d

일반 파일(-type f) 중 10MB를 초과하는 대용량 파일(-size +10M)을 찾고 상세 정보를 함께 확인하기 위해 find ~/find_lab -type f -size +10M -exec ls -lh {} + 명령어를 실행합니다.
조건에 일치하는 15MB 크기의 large_archive.iso 파일이 검색되어 상세 권한 및 용량 정보와 함께 출력됩니다.

find ~/find_lab -type f -size +10M -exec ls -lh {} +

시간 조건(mtime/mmin) 기반 변경 파일 찾기

시간 경과에 따른 파일 검색 실습을 위해 이틀 전 수정된 과거 샘플 파일을 생성하는 touch -d "2 days ago" ~/find_lab/backup/old_backup.tar 명령어를 실행합니다.

touch -d “2 days ago” ~/find_lab/backup/old_backup.tar

최근 변경된 최신 파일 검색 테스트를 위해 현재 시점의 타임스탬프를 가진 샘플 파일을 생성하는 touch ~/find_lab/logs/recent.log 명령어를 실행합니다.

touch ~/find_lab/logs/recent.log

최근 24시간 이내에 수정된 일반 파일을 검색하기 위해 -mtime -1 옵션을 적용한 find ~/find_lab -type f -mtime -1 명령어를 실행합니다.
기준 시간(24시간) 이내에 생성되거나 변경된 모든 파일 목록이 정상적으로 출력됩니다.

find ~/find_lab -type f -mtime -1

수정된 지 24시간(1일)이 초과된 오래된 파일을 검색하기 위해 -mtime +1 옵션을 적용한 find ~/find_lab -type f -mtime +1 명령어를 실행합니다.
이틀 전 날짜로 생성해 두었던 old_backup.tar 파일만 정확하게 필터링되어 출력됩니다.

find ~/find_lab -type f -mtime +1

검색 결과 일괄 제어: -exec 옵션과 삭제 처리

일괄 제어 및 권한 변경 실습을 진행하기 위해 임시 디렉터리를 만들고 샘플 임시 파일들을 생성하는 mkdir -p ~/find_lab/temp && touch ~/find_lab/temp/cache1.tmp ~/find_lab/temp/cache2.tmp 명령어를 실행합니다.

mkdir -p ~/find_lab/temp && touch ~/find_lab/temp/cache1.tmp ~/find_lab/temp/cache2.tmp

검색된 모든 .tmp 확장자 파일의 접근 권한을 644로 일괄 변경하기 위해 -exec 옵션을 적용한 find ~/find_lab/temp -name "*.tmp" -exec chmod 644 {} \; 명령어를 실행합니다.
{} 기호는 검색된 개별 파일의 경로로 치환되며, \;는 -exec 구문으로 전달되는 명령어의 끝을 지정합니다.

find ~/find_lab/temp -name “*.tmp” -exec chmod 644 {} ;

권한 변경 작업이 정상적으로 반영되었는지 확인하기 위해 ls -l ~/find_lab/temp 명령어를 실행합니다.
출력 결과 두 개의 임시 파일 모두 읽기 및 쓰기 권한(-rw-r--r--, 644)으로 수정된 것을 확인할 수 있습니다.

ls -l ~/find_lab/temp

검색 조건에 일치하는 .tmp 파일들을 일괄 삭제하기 위해 rm -f 명령어를 연계한 find ~/find_lab/temp -name "*.tmp" -exec rm -f {} \; 명령어를 실행합니다.
별도의 추가 확인 과정 없이 검색된 대상 파일들이 한 번에 제거됩니다.

find ~/find_lab/temp -name “*.tmp” -exec rm -f {} ;

임시 파일들이 모두 정상적으로 삭제되었는지 최종 확인하기 위해 ls -la ~/find_lab/temp 명령어를 실행합니다.
현재 디렉터리(.)와 상위 디렉터리(..)만 남아 있고 생성했던 임시 파일들이 모두 깔끔하게 삭제된 상태를 보여줍니다.

ls -la ~/find_lab/temp

지금까지 리눅스 find 명령어의 핵심 검색 옵션부터 실무에서 바로 활용할 수 있는 일괄 처리 기법까지 간단하게 정리해보았습니다.
알려드린 옵션들을 상황에 맞게 조합해 보면서 파일 탐색과 관리 작업을 한층 더 효율적으로 진행해 보시기 바랍니다.