find 기초: 파일 이름·크기·날짜로 검색하기

find 명령어의 핵심 옵션인 -name, -type, -size, -mtime을 사용해 원하는 파일을 정확히 찾는 방법을 배운다.

· 5 min read · PALDYN Team

지난 글에서 파일 메타데이터를 조회하는 방법을 배웠다. 이번 글에서는 **Linux에서 가장 강력한 파일 검색 명령어인 find**를 다룬다. find는 이름, 크기, 날짜, 권한, 소유자 등 다양한 조건을 조합해 원하는 파일을 정밀하게 찾아내고, 찾은 파일에 명령을 실행하는 것까지 한 번에 처리할 수 있다.

find의 기본 구조

find [검색 경로] [조건] [동작]
find /etc -name 'hosts'          # /etc 아래에서 hosts 라는 파일 찾기
find . -name '*.log'             # 현재 디렉터리 아래 *.log 파일
find /home -user alice           # alice 소유 파일
find / -type f -size +100M       # 전체 시스템의 100MB 초과 파일

경로를 지정하지 않으면 현재 디렉터리(.)에서 시작한다. 2>/dev/null은 권한 오류 메시지를 숨길 때 자주 붙인다.

-name: 파일 이름 조건

가장 자주 쓰는 조건이다. 쉘 글로브 패턴(*, ?, [...])을 사용한다. 반드시 따옴표로 감싸야 쉘이 글로브를 확장하지 않는다.

find . -name '*.txt'             # .txt 로 끝나는 파일
find . -name 'error*'            # error 로 시작하는 파일
find . -iname '*.Log'            # 대소문자 무시 (-iname)
find . -name 'config.??'         # config. 뒤에 두 글자

-type: 파일 유형 조건

find . -type f                   # 일반 파일만
find . -type d                   # 디렉터리만
find . -type l                   # 심볼릭 링크만
find . -type b                   # 블록 디바이스
find . -type p                   # 명명된 파이프(FIFO)

-type f를 빠뜨리면 디렉터리도 결과에 포함돼 후속 처리에 문제가 생기는 경우가 많다.

-size: 파일 크기 조건

크기 단위는 c(바이트), k(1024바이트), M(메가), G(기가)이다. +는 초과, -는 미만을 의미한다.

find . -size +10M                # 10MB 초과
find . -size -1k                 # 1kB 미만
find . -size 0c                  # 0바이트 (빈 파일)
find . -size +1G                 # 1GB 초과 (대용량 파일 탐지)

find 핵심 조건 정리

-mtime / -mmin: 날짜 조건

날짜 조건은 파일의 mtime(최종 수정 시각)을 기준으로 한다.

find . -mtime -7                 # 최근 7일 이내 수정
find . -mtime +30                # 30일 전에 수정 (오래된 파일)
find . -mtime 1                  # 정확히 하루 전
find . -mmin -60                 # 최근 60분 이내 수정
find . -newer ref.txt            # ref.txt 보다 mtime 이 더 최신

-mtime N에서 N은 일 단위다. -mtime -1은 “24시간 이내”이고, -mtime +1은 “48시간 이전”이다.

깊이 제한: -maxdepth / -mindepth

find . -maxdepth 1               # 현재 디렉터리만 (하위 탐색 없음)
find . -maxdepth 2 -name '*.py'  # 2단계까지만 탐색
find . -mindepth 2 -type f       # 2단계 이하부터

-maxdepth 1을 붙이면 ls처럼 현재 디렉터리의 직접 자식만 검색한다.

조건 조합: AND, OR, NOT

find는 여러 조건을 논리 연산자로 결합한다. 기본은 AND(-a)다.

# AND: .log 파일 중 10MB 초과
find . -name '*.log' -size +10M

# OR: .log 또는 .txt 파일
find . \( -name '*.log' -o -name '*.txt' \)

# NOT: .git 디렉터리 제외
find . ! -name '.git' -type d

# -prune 으로 특정 디렉터리 제외 후 나머지 검색
find . -name '.git' -prune -o -name '*.md' -print

\(\)는 쉘에서 특수 문자이므로 반드시 역슬래시로 이스케이프한다.

권한·소유자 조건

find /home -user alice -type f   # alice 소유 파일
find /tmp -perm 777              # 정확히 777 권한인 파일
find . -perm /u+x                # 사용자 실행 권한 있는 파일
find / -perm -4000 2>/dev/null   # setuid 파일 (보안 점검)

-perm /모드는 “해당 비트 중 하나라도 설정된 파일”, -perm -모드는 “해당 비트 모두 설정된 파일”이다.

find 실전 예시 모음

-empty와 빈 파일 정리

# 빈 파일 찾기
find . -type f -empty

# 빈 디렉터리 찾기
find . -type d -empty

# 빈 파일 일괄 삭제 (주의: 먼저 목록 확인)
find . -type f -empty -print     # 확인
find . -type f -empty -delete    # 삭제

지난 글: touch & stat: 파일 생성과 메타데이터 조회

다음 글: find -exec & xargs: 찾은 파일에 명령 실행하기


읽어주셔서 감사합니다. 😊