(Linux) find 명령어

May 13, 2025 · 9min

#디렉토리#파일#명령어#링크#리눅스

파일과 디렉토리를 찾는 명령어, find

find 명령어를 사용하는데 “좋은” 이유가 필요한 건 아닙니다.
find를 사용하면 시스템을 탐색하는 대신, 무언가를 더 쉽게 검색할 수 있습니다.
- Seth Kenlon (Red Hat Blog 저자)

find명령어는 리눅스에서 파일이나 디렉토리를 검색하고 싶을 때 사용하는 명령어입니다.

본 명령어는 다음과 같은 방법으로 사용할 수 있습니다.

$ find [경로] [옵션] [표현식]

find 명령어의 인자는 크게 두 종류로 나뉩니다.

  • 옵션 (Option): 실행 방식 자체를 제어
  • 표현식 (Expression): 어떤 파일을 찾을지 정의

자주 사용하는 표현식 모음

1. 이름/경로 관련

표현식설명
-name pattern파일 이름이 pattern과 일치
-iname pattern대소문자 구분 없이 이름 일치
-path pattern전체 경로가 pattern과 일치
-ipath pattern대소문자 무시하고 전체 경로 일치
-regex pattern전체 경로가 정규표현식과 일치
-iregex pattern대소문자 무시한 정규표현식
-wholename pattern-path와 동일
-lname pattern심볼릭 링크가 가리키는 경로가 일치
-ilname pattern위 조건에서 대소문자 무시

2. 파일 타입 관련

표현식설명
-type c파일 유형이 c일 때
  • f: 일반 파일
  • d: 디렉토리
  • l: 심볼릭 링크
  • c: 문자 디바이스
  • b: 블록 디바이스
  • s: 소켓
  • p: FIFO (named pipe)

3. 파일 크기 관련

표현식설명
-size n[cwbkMG]파일 크기 비교
  • c: byte
  • w: 2-byte 단위
  • k: KB
  • M: MB
  • G: GB
  • +n: n보다 큼
  • n: n보다 작음
  • n: 정확히 일치

4. 시간 관련

표현식설명
-mtime n수정된 지 n일 전
-mmin n수정된 지 n분 전
-atime n마지막 접근 n일 전
-amin n마지막 접근 n분 전
-ctime ninode 변경 n일 전
-cmin ninode 변경 n분 전
-newer filefile보다 최근 수정
-anewer filefile보다 최근 접근
-cnewer filefile보다 최근 상태 변경

5. 권한/소유자 관련

표현식설명
-user username소유자가 username
-uid nUID가 n
-group groupname그룹이 groupname
-gid nGID가 n
-nogroup없는 그룹 ID 소속
-nouser없는 사용자 ID 소속
-perm mode퍼미션이 정확히 일치
-perm -mode최소한 mode 포함 (AND)
-perm /modemode 중 하나라도 포함 (OR)

6. 링크 관련

표현식설명
-links n하드링크 수가 n
-samefile filefile과 같은 inode (같은 파일)

7. 구조/기타 조건

표현식설명
-empty비어있는 파일 또는 디렉토리
-false항상 거짓
-true항상 참
-fstype type파일 시스템 종류 일치

8. 실행/출력 관련

표현식설명
-exec command {} \\;각 파일에 대해 command 실행
-exec command {} +여러 파일을 한 번에 실행
-execdir command {} \\;파일 디렉토리에서 실행
-ok command {} \\;사용자 확인 후 실행
-okdir command {} \\;디렉토리 기준 + 확인 실행
-print경로 출력
-print0널 문자로 구분된 출력
-printf formatC 스타일 포맷 출력
-lsls -dils 스타일 출력
-fls file-ls 결과를 파일로 저장
-fprint file경로를 파일로 출력
-fprint0 file널 문자로 구분하여 출력
-fprintf file format지정 포맷으로 파일 출력

9. 논리 연산자

연산자설명
-a 또는 생략AND (둘 다 참)
-oOR (하나라도 참)
! 또는 -notNOT (부정)
( )논리 조건을 그룹화할 때 사용. 셸에서 괄호는 특별하므로 (, )로 이스케이프 필요

find 명령어의 옵션 (Options)

1. 심볼릭 링크 관련

옵션설명
-P기본값. 심볼릭 링크를 따라가지 않고, 링크 자체만 처리함.
-L심볼릭 링크를 따라감. 즉, 링크가 가리키는 실제 파일이나 디렉토리까지 탐색함. 루프가 생길 위험 있음.
-H명령줄 인자에서만 심볼릭 링크를 따라감.

2. 디렉토리 순회/파일 시스템 관련

옵션설명
-noleaf디렉토리 하드링크 수를 기준으로 하는 최적화를 비활성화.
-daystart-mtime, -atime, -ctime 등의 기준을 "현재 시간"이 아닌, 오늘 0시 기준으로 설정.

3. 깊이 제한

옵션설명
-mount 또는 -xdev현재 파일 시스템 경계 안에서만 탐색. 다른 디스크, 파티션으로 넘어가지 않음.
-maxdepth n하위 디렉토리를 최대 n단계까지만 탐색. n = 0이면 경로 자체만 검사함.
-mindepth nn단계 이상만 탐색. -mindepth 1은 최상위 디렉토리는 무시하고 그 안의 파일들부터 탐색.

4. 최적화 및 성능 관련

옵션설명
-O[level]표현식 최적화 레벨.

레벨은 0~3까지 있으며, 높을수록 더 복잡한 최적화를 수행.

  • 0: 최적화 없음
  • 1: 기본 (디폴트)
  • 2: 속도 향상 (더 좋은 순서로 실행)
  • 3: 고급 최적화 (덜 자주 참이 되는 조건부터 먼저 검사)
    • ignore_readdir_race: 디렉토리 탐색 도중 변경(삭제 등)이 일어났을 때 에러를 무시.
    • noignore_readdir_race: 위와 반대로, 변경이 생기면 에러 발생시킴. (기본값)

5. 디버깅 관련 (D)

옵션설명
-D help디버깅 옵션 설명 출력
-D tree표현식 트리를 출력 (우선순위 구조 확인용)
-D exec-exec, -execdir, -ok, -okdir의 실행 흐름 진단
-D opt어떤 최적화가 적용됐는지 확인
-D rates각 표현식이 몇 번 참/거짓 판별됐는지 비율 표시
-D search디렉토리 탐색 흐름 상세 추적
-D statstat(), lstat() 시스템 호출 추적 (많이 나옴)

6. 출력/버그 추적

옵션설명
-versionfind 명령어 버전 정보 출력
--help사용법 간단 요약 출력

find 명령어를 사용한 사용 예시

Act1. 홈 디렉토리에서 최근 7일 내 수정된 .log 파일 찾기

$ find ~ -name "*.log" -mtime -7

Act 2. 시스템 루트에서 1MB 이상인 setuid 바이너리 찾기

$ sudo find / -xdev -type f -size +1M -perm /4000

Act 3. 현재 디렉토리에서 빈 디렉토리를 지우기

$ find . -O2 -type d -empty -mindepth 1 -maxdepth 3 -exec rm -r {} +

이 글은 크리에이티브 커먼스 라이선스 4.0을 준수합니다.