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 강좌 / 배포판 선택하기

Linux 강좌 / 배포판 선택하기

리눅스 입문과 서버 실습에 Ubuntu와 Rocky Linux 중 무엇을 선택하면 좋을까요? 학습 목표, 패키지 관리 방식과 지원 정책을 기준으로 두 배포판을 비교합니다.

Linux / 명령어 / whereis - 명령의 바이너리·소스·매뉴얼 위치 찾기

Linux / 명령어 / whereis - 명령의 바이너리·소스·매뉴얼 위치 찾기

Linux whereis 명령어로 프로그램의 바이너리, 소스와 매뉴얼 페이지 위치를 찾는 방법을 설명합니다. 검색 범위 제한과 which·find와의 차이도 정리합니다.

Linux / 명령어 / shutdown - 시스템 종료·재시작 예약과 취소

Linux / 명령어 / shutdown - 시스템 종료·재시작 예약과 취소

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

Linux / 명령어 / paste - 파일의 행을 가로로 결합

Linux / 명령어 / paste - 파일의 행을 가로로 결합

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

Linux / 명령어 / host - 도메인과 IP 주소의 DNS 정보 간단히 조회

Linux / 명령어 / host - 도메인과 IP 주소의 DNS 정보 간단히 조회

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

Linux / 명령어 / tar - 여러 파일을 묶고 압축 아카이브 풀기

Linux / 명령어 / tar - 여러 파일을 묶고 압축 아카이브 풀기

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

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

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

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

Linux / 명령어 / diff - 텍스트 파일과 디렉터리 차이 비교

Linux / 명령어 / diff - 텍스트 파일과 디렉터리 차이 비교

Linux diff 명령어로 텍스트 파일과 디렉터리의 차이를 비교하는 방법을 설명합니다. unified 형식, 재귀 비교, 공백 무시와 종료 상태를 정리합니다.

Linux / 명령어 / shred - 파일 데이터 덮어쓰기

Linux / 명령어 / shred - 파일 데이터 덮어쓰기

Linux shred 명령어로 파일이나 장치의 데이터를 덮어쓰는 방법과 한계를 설명합니다. SSD, 저널링·복사 방식 파일 시스템, 스냅샷 환경에서 완전 삭제를 보장할 수 없는 이유도 알아봅니다.

Linux / 명령어 / sort - 텍스트 행 정렬

Linux / 명령어 / sort - 텍스트 행 정렬

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