find 명령어 사용법

지정한 경로 아래에서 조건에 맞는 파일과 디렉터리를 찾는 명령어입니다.

파일·디렉터리 관리연결 실습 문제 12개Rocky Linux 8 기준 · 실행 결과는 실습 컨테이너에서 확인

기본 문법

find [검색경로...] [조건식] [동작]

find는 시작 디렉터리부터 하위 경로를 재귀적으로 훑으면서 이름·종류·크기·권한·소유자·수정 시각 등 조건에 맞는 항목만 골라내는 명령어입니다. 여러 조건을 조합할 수 있고, 찾아낸 결과에 다른 명령을 실행하는 -exec, 항목을 삭제하는 -delete 같은 동작도 함께 지정할 수 있습니다.

실무에서는 오래된 로그 정리, 특정 확장자 파일 수집, 용량이 큰 파일 추적처럼 '조건으로 대상을 고른 뒤 처리한다'는 작업에 쓰입니다. 보안 점검에서는 SUID/SGID가 설정된 파일이나 다른 사용자가 쓸 수 있는(world-writable) 파일을 찾는 데 활용합니다.

리눅스마스터·RHCSA·LPIC 시험에서는 -name, -type, -size, -perm, -user, -mtime 조건과 -exec, -delete 동작을 조합하는 형태로 출제됩니다. 결과를 sort, wc, xargs와 이어 붙여 목록 파일로 저장하는 문제도 있습니다.

아래 설명과 예제는 Rocky Linux 8(GNU findutils 4.6) 기준입니다. -printf, -delete, -maxdepth 등은 GNU find 확장이라 다른 유닉스 계열의 find에는 없을 수 있습니다.

자주 쓰는 옵션

옵션의미
-name 패턴파일 이름이 패턴과 일치하는 항목 검색(대소문자 구분, -iname은 구분 안 함)find /var/log -name "*.log"
-type 종류종류로 제한. f=일반 파일, d=디렉터리, l=심볼릭 링크find /etc -type d
-size 크기크기 조건. +는 초과, -는 미만, 단위 c(바이트)·k(KiB)·M(MiB)·G(GiB). 단위를 생략하면 512바이트 블록이며, 파일 크기는 지정한 단위로 올림 처리됨find /home -type f -size +1M
-mtime 일수수정 시각 기준. 하루는 24시간이며 소수점 이하는 버림. +7은 수정된 지 7×24시간을 넘긴(실질적으로 8일 이상 지난) 파일find /tmp -type f -mtime +7
-user 사용자지정한 사용자가 소유한 항목 검색(-group은 그룹 기준)find /home -user sisley 2>/dev/null
-perm 모드권한 조건. 숫자만 쓰면 정확히 일치, -는 지정 비트를 모두 포함, /는 지정 비트 중 하나라도 포함find /usr/bin -type f -perm /6000
-empty내용이 비어 있는 파일이나 디렉터리만 검색find /home/exercise/cleanup -type d -empty
-maxdepth 깊이탐색할 최대 깊이 제한(1이면 시작 디렉터리 바로 아래까지). 다른 조건식보다 앞에 써야 함find /etc -maxdepth 1 -type f
-exec 명령 {} \;찾은 항목마다 명령 실행. {}가 경로로 치환되며, \; 대신 +를 쓰면 여러 경로를 한 번에 묶어 전달find /tmp/demo/conf -name "*.conf" -exec cp {} /tmp/demo/collected/ \;
-delete찾은 항목을 삭제. 조건식 뒤에 써야 하며 되돌릴 수 없음. 실행 전 -delete 없이 목록을 먼저 확인할 것find /tmp/old -type f -mtime +30 -delete

실무 예시

확장자로 파일 찾기

준비: mkdir -p /tmp/demo/src/sub; echo hello > /tmp/demo/src/a.log; echo hi > /tmp/demo/src/sub/b.log; echo x > /tmp/demo/src/c.txt

$ find /tmp/demo/src -type f -name "*.log"
/tmp/demo/src/sub/b.log
/tmp/demo/src/a.log

지정한 디렉터리와 그 하위까지 재귀적으로 훑어 .log 일반 파일만 출력합니다. -type f 를 빼면 .log로 끝나는 디렉터리나 심볼릭 링크도 함께 잡힙니다. 출력 순서는 디렉터리를 읽는 순서를 따르므로 이름순이 아닙니다. 정렬이 필요하면 뒤에 | sort 를 붙이세요.

조건에 맞는 파일 개수 세기

$ find /tmp/demo/src -type f -name "*.log" | wc -l
2

find 결과를 wc -l 로 넘겨 개수만 얻습니다. 확장자별 파일 수를 요약할 때 쓰는 형태입니다. 파일 이름에 줄바꿈이 들어 있으면 개수가 어긋나므로, 정확히 세려면 find ... -printf ".\n" | wc -l 처럼 쓰는 편이 안전합니다.

1MB를 초과하는 파일 목록 만들기

준비: dd if=/dev/zero of=/tmp/demo/src/big.bin bs=1M count=2 2>/dev/null

$ find /tmp/demo/src -type f -size +1M -printf "%f\n" | sort
big.bin

-size +1M 은 1MiB를 초과하는 파일만 선택하고, -printf "%f\n" 은 경로를 뺀 파일명만 출력합니다. sort로 이름 오름차순 정렬합니다. -printf 는 GNU find 확장입니다.

SUID 또는 SGID가 설정된 파일 감사

준비: echo y > /tmp/demo/src/run.sh; chmod 4755 /tmp/demo/src/run.sh

$ find /tmp/demo -type f -perm /6000 | sort
/tmp/demo/src/run.sh

-perm /6000 은 SUID(4000)나 SGID(2000) 중 하나라도 설정된 파일을 찾습니다. 실제 점검에서는 /usr, /bin 등 시스템 경로를 대상으로 목록을 뽑아 기준 목록과 비교합니다. 찾은 파일의 권한을 바꾸기 전에는 해당 프로그램이 SUID를 필요로 하는지 먼저 확인해야 합니다.

찾은 파일을 다른 디렉터리로 복사

준비: mkdir -p /tmp/demo/conf /tmp/demo/collected; echo k > /tmp/demo/conf/app.conf; echo k > /tmp/demo/conf/db.conf; echo k > /tmp/demo/conf/notes.txt

$ find /tmp/demo/conf -type f -name "*.conf" -exec cp {} /tmp/demo/collected/ \; && ls /tmp/demo/collected
app.conf
db.conf

조건에 맞는 파일마다 cp 를 실행해 collected 디렉터리로 모읍니다. .conf 파일만 복사되고 notes.txt 는 제외된 것을 ls 로 확인할 수 있습니다. 파일이 많으면 -exec cp -t /tmp/demo/collected/ {} + 처럼 + 를 써서 호출 횟수를 줄일 수 있습니다. 서로 다른 디렉터리에 같은 이름의 파일이 있으면 나중 것이 앞의 것을 덮어씁니다.

주의할 점

  • -name "*.log" 처럼 와일드카드는 따옴표로 감싸세요. 따옴표가 없으면 셸이 먼저 확장해 의도와 다른 결과가 나옵니다.
  • find 의 출력 순서는 이름순이 아니라 디렉터리를 읽는 순서입니다. 정해진 순서가 필요하면 sort 를 이어 붙이세요.
  • -delete 는 되돌릴 수 없습니다. 먼저 -delete 없이 조건만으로 목록을 확인한 뒤 실행하고, -delete 는 조건식 뒤에 두어야 합니다. 경로를 넓게 잡은 상태에서 실행하면 필요한 파일까지 지워집니다.
  • -size 는 지정한 단위로 올림 처리됩니다. 예를 들어 500KB 파일도 1M 단위로는 1로 계산되어 -size -1M 에는 걸리지 않습니다. 단위를 생략하면 512바이트 블록 기준입니다.
  • -mtime +7 은 '7일보다 오래된'이 아니라 '수정된 지 7×24시간을 넘긴' 파일이며, 소수점이 버려지므로 실질적으로 8일 이상 지난 파일이 걸립니다. 분 단위가 필요하면 -mmin 을 쓰세요.
  • -perm 644(정확히 일치), -perm -644(지정 비트 모두 포함), -perm /644(하나라도 포함)는 의미가 서로 다릅니다.
  • / 처럼 넓은 경로를 일반 사용자로 검색하면 'Permission denied' 메시지가 섞입니다. 필요하면 2>/dev/null 로 걸러내되, 이때 권한 때문에 검색되지 않은 영역이 있다는 점은 감안해야 합니다.

이 명령어로 풀 수 있는 실습 문제

브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.

관련 명령어

마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.