find 기초: 파일 이름·크기·날짜로 검색하기
find 명령어의 핵심 옵션인 -name, -type, -size, -mtime을 사용해 원하는 파일을 정확히 찾는 방법을 배운다.
지난 글에서 파일 메타데이터를 조회하는 방법을 배웠다. 이번 글에서는 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 초과 (대용량 파일 탐지)
-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 -모드는 “해당 비트 모두 설정된 파일”이다.
-empty와 빈 파일 정리
# 빈 파일 찾기
find . -type f -empty
# 빈 디렉터리 찾기
find . -type d -empty
# 빈 파일 일괄 삭제 (주의: 먼저 목록 확인)
find . -type f -empty -print # 확인
find . -type f -empty -delete # 삭제
지난 글: touch & stat: 파일 생성과 메타데이터 조회
다음 글: find -exec & xargs: 찾은 파일에 명령 실행하기
읽어주셔서 감사합니다. 😊