Linux / 명령어 / find - 조건으로 파일과 디렉터리 검색

find는 지정한 시작 경로를 직접 순회하면서 조건에 맞는 파일과 디렉터리를 찾는 명령입니다. 이름뿐 아니라 종류, 크기, 수정 시각, 권한을 조합하고 결과에 명령을 실행할 수 있습니다.

이 글에서는 find의 기본 문법과 주요 옵션, 실제 사용 예제, 관련 명령과의 차이, 사용할 때 주의할 점을 설명합니다.

find 명령어란?

기본 구조는 시작점, 표현식 순서입니다. 표현식은 검사(test), 논리 연산자, 동작(action)으로 구성되며 왼쪽에서 오른쪽으로 평가됩니다. 별도 동작을 지정하지 않으면 일치한 경로를 출력하는 -print가 적용됩니다.

기본 문법

find [시작경로 ...] [표현식]

옵션과 세부 동작은 구현과 버전에 따라 달라질 수 있습니다. 현재 시스템에서는 find --help와 man find으로 설치된 명령의 설명을 확인하세요.

find 기본 사용법

이름으로 찾기

셸이 와일드카드를 먼저 확장하지 않도록 패턴을 따옴표로 감쌉니다.

find . -name '*.log'

종류와 크기로 찾기

-type f는 일반 파일, -size +100M은 100MiB보다 큰 파일을 뜻합니다.

find /var -type f -size +100M

수정 시각으로 찾기

-mtime은 24시간 단위로 반올림된 날짜 구간을 사용합니다. 분 단위에는 -mmin을 사용합니다.

find /srv/app -type f -mmin -60

검색 범위와 결과 경로 확인하기

find는 지정한 시작 디렉터리 아래를 실제로 탐색합니다. 패턴을 따옴표로 감싸 셸이 먼저 펼치지 않게 합니다.

mkdir -p demo-find
touch demo-find/a.txt
find demo-find -name '*.txt'

예시 출력:

demo-find/a.txt

기본 출력에는 시작 경로를 포함한 경로가 표시됩니다. -delete나 -exec와 결합하기 전에는 조회 결과가 의도한 파일만 포함하는지 먼저 확인하세요.

주요 옵션

옵션 설명
-name PATTERN 대소문자를 구분해 파일명 패턴을 검사합니다.
-iname PATTERN 대소문자를 구분하지 않고 파일명 패턴을 검사합니다.
-type TYPE f, d, l 등 파일 종류를 제한합니다.
-maxdepth N 시작점에서 검색할 최대 깊이를 제한합니다.
-mtime N 수정 시각을 24시간 단위로 검사합니다.
-size N 파일 크기 조건을 적용합니다.
-exec ... {} + 일치 경로를 모아 외부 명령에 안전하게 인수로 전달합니다.
-delete 일치 항목을 삭제합니다. 조건과 순서를 충분히 검증해야 합니다.

실전 활용 예제

빈 디렉터리와 파일 찾기

-empty는 빈 일반 파일과 빈 디렉터리에 모두 일치할 수 있으므로 종류를 함께 지정합니다.

find . -type d -empty -print

일치 파일을 일괄 처리하기

파일명에 공백이나 줄바꿈이 있어도 안전하도록 -exec ... {} +를 사용합니다.

find . -type f -name '*.tmp' -exec ls -l -- {} +

삭제 전에 대상을 검토하기

먼저 -print로 결과를 확인하고 시작 경로와 조건을 고정한 뒤에만 삭제 동작을 추가합니다.

find ./cache -type f -mtime +30 -print
find ./cache -type f -mtime +30 -delete

find와 관련 명령 비교

명령 주요 역할 적합한 상황
find 실시간 경로 순회 정교한 조건과 동작
locate 색인 데이터베이스 검색 빠른 이름 검색
which PATH에서 실행 파일 검색 실행될 외부 명령 확인
grep -R 파일 내용 검색 텍스트 패턴 찾기

사용할 때 주의할 점

패턴은 따옴표로 감쌉니다

*.log를 그대로 쓰면 현재 셸이 먼저 확장해 예상과 다른 검색이 될 수 있습니다.

-delete는 곧바로 삭제합니다

경로와 조건을 -print로 검증하고 심볼릭 링크 및 마운트 경계를 고려합니다.

연산자 우선순위를 확인합니다

-o를 섞을 때 괄호를 셸에서 이스케이프하지 않으면 조건 범위가 달라질 수 있습니다.

FAQ

하위 디렉터리까지 자동으로 검색하나요?

네. 기본적으로 시작 경로 아래를 재귀적으로 순회합니다.

파일명에서 대소문자를 무시하려면요?

GNU find에서는 -iname을 사용합니다.

공백이 있는 파일을 안전하게 처리하려면요?

-exec 명령 {} + 또는 -print0과 NUL 입력을 지원하는 도구를 조합합니다.

locate보다 느린 이유는 무엇인가요?

find는 현재 파일 시스템을 직접 순회하지만 locate는 미리 만든 색인을 조회하기 때문입니다.

관련 글과 공식 문서

같은 카테고리의 다른 글
Linux / 명령어 / truncate - 파일 크기 줄이기와 늘리기

Linux / 명령어 / truncate - 파일 크기 줄이기와 늘리기

Linux truncate 명령어로 파일 크기를 지정하거나 늘리고 줄이는 방법을 설명합니다. 희소 파일, 상대 크기 조정, 기준 파일과 같은 크기로 맞추는 방법 및 데이터 손실 주의점을 알아봅니다.

Linux / 명령어 / pgrep - 조건에 맞는 프로세스 ID 검색

Linux / 명령어 / pgrep - 조건에 맞는 프로세스 ID 검색

Linux pgrep 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / less - 긴 파일을 검색하며 페이지 단위로 보기

Linux / 명령어 / less - 긴 파일을 검색하며 페이지 단위로 보기

Linux less 명령어로 긴 텍스트와 명령 출력을 페이지 단위로 탐색하는 방법을 설명합니다. 검색, 이동, 실시간 갱신과 파이프 사용법을 정리합니다.

Linux / 명령어 / tree - 디렉터리 구조를 트리 형태로 출력

Linux / 명령어 / tree - 디렉터리 구조를 트리 형태로 출력

Linux tree 명령어로 디렉터리와 파일 구조를 계층적으로 확인하는 방법을 설명합니다. 설치, 깊이 제한, 숨김 파일, 제외 패턴, 크기·권한 표시와 JSON 저장 방법까지 정리합니다.

Linux / 명령어 / help - 셸 내장 명령어 도움말 확인

Linux / 명령어 / help - 셸 내장 명령어 도움말 확인

Bash help 명령어로 셸 내장 명령과 문법의 도움말을 확인하는 방법을 설명합니다. 출력 형식, 패턴 검색, type·man·--help와의 차이 및 스크립트 활용법을 정리합니다.

Linux / 명령어 / unxz - xz 압축 파일 풀기

Linux / 명령어 / unxz - xz 압축 파일 풀기

Linux unxz 명령어의 용도와 기본 문법을 알아봅니다. 파일 처리 예제, 주요 옵션과 원본 보존·덮어쓰기 주의점을 설명합니다.

Linux / 명령어 / ssh-keygen - SSH 키 쌍 생성과 지문 확인

Linux / 명령어 / ssh-keygen - SSH 키 쌍 생성과 지문 확인

Linux ssh-keygen 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / zip - 여러 파일을 ZIP 아카이브로 묶기

Linux / 명령어 / zip - 여러 파일을 ZIP 아카이브로 묶기

Linux zip 명령어의 용도와 기본 문법을 알아봅니다. 파일 처리 예제, 주요 옵션과 원본 보존·덮어쓰기 주의점을 설명합니다.

Linux / 명령어 / lsmod - 로드된 커널 모듈 확인

Linux / 명령어 / lsmod - 로드된 커널 모듈 확인

Linux lsmod 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / reboot - 시스템 안전하게 재시작

Linux / 명령어 / reboot - 시스템 안전하게 재시작

Linux reboot 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.