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는 미리 만든 색인을 조회하기 때문입니다.









