-
[Linux] find 명령어에 대해 알아보자IT Study/OS 2026. 1. 26. 11:25
Linux 서버 환경에서 정말 많이 쓰이는 명령어를 꼽아보라하면 단연 find가 있을 것이다.

find
지정한 디렉토리와 그 하위 모든 디렉토리를 뒤져서 조건(expression)에 맞는 파일을 찾는다.
find pattern [file-list]Linux에서는 아무런 조건(출력 지시)을 주지 않으면 -print가 생략된 것으로 간주하고 결과를 보여준다. 그러나 예전 시스템, 전통적인 유닉스(UNIX)에서는 -print 없으면 결과값 출력을 하지 않고 조용히 실행됨 !
Criteria 주요 검색 조건
조건명 의미 상세 설명 -name filename 이름으로 찾기 파일 이름이 일치하면 선택 (와일드 카드 * 사용 시 따옴표 필요) -type c 종류로 찾기 f(일반 파일), d(디렉토리) 등 파일 종류졀로 찾기 -user name 소유자로 찾기 특정 사용자(ID 또는 이름)가 소유한 파일 찾기 -size ± n 크기로 찾기 +n(n보다 큼), -n(n보다 작음), n(정확히 n) 바이트 크기인 파일 검색 -mtime ± n 수정 시간 최근 n일 내에 수정된 파일 찾기 -newer file 비교 검색 지정한 file보다 더 최근에 수정된 파일만 찾기 -print 경로 출력 조건에 맞는 파일의 전체 경로 이름을 화면에 한 줄씩 표시 -exec command 즉시 실행 찾은 파일들을 인자 삼아 사용자가 지정한 명령어를 즉시 실행 -ok command 확인 후 실행 -exec와 동일하게 명령어를 실행하지만, 각 파일마다 실행 여부 물어보고 승인(y)받아 처리 - -name filename
- * (Asterisk): 0개 이상의 모든 문자와 일치
- ? (Question Mark): 1개의 문자와 일치 - ?의 개수로 모르는 문자만큼을 표시할 수 있음
- [ ] (Square Brackets): 괄호 안의 문자 중 하나와 일치
[ab]*.txt : a나 b로 시작하는 텍스트 파일
- -type c
기호 의미(file type) 설명 f Plain file 일반 텍스트, 소스 코드, 이미지, 실행 파일 등 d Directory 폴더(디렉토리)만 골라서 찾고 싶을 때 사용 l Symbolic link 다른 파일을 가리키는 바로가기(링크) 파일 s Socket 프로세스 간 통신에 쓰이는 소켓 파일 - -user name
- 특정 사용자를 찾는 방법
- who: 현재 로그인한 모든 사용자의 아이디부터 터미널 정보, 접속 시간까지 알려줌
- w: who보다 더 자세한 정보 제공(접속 중인 사용자가 지금 어떤 명령어를 실행중인지 확인 가능)
- users: 접속중인 사용자의 아이디만 제공
- cat /ect/passwd: 시스템의 모든 사용자 목록 확인
- 특정 사용자를 찾는 방법
- -size ± n
- +n: 크기가 n보다 큰 파일을 찾음(초과)
- -n: 크기가 n보다 작은 파일을 찾음(미만)
- n(기호 없음): 크기가 정확히 n인 파일을 찾음
K 킬로바이트(1024bytes) M 메가바이트 G 기가바이트 c 바이트(Caracters/Bytes) b 512바이트 블록(단위 쓰지 않는 경우 기본적으로 이 단위 사용)
- -mtime ± n
- +n: 수정된 지 n일보다 오래된 파일 찾기
- -n: 수정된 지 n일이 안된(최근 n일 이내) 파일을 찾기
- n: 정확히 n일 전에 수정된 파일을 찾기
- mtime외에 두가지 시간 기준
- -atime(Access Time): 파일을 읽거나 실행한 시간 기준
- -ctime(Change Time): 파일의 권한이나 소유주 등 속성이 바뀐 시간 기준
- - newer file
- 상대적 시간 비교: 날짜나 시간을 숫자로 계산하는 대신 특정 파일보다 더 나중에(최근에) 수정된 파일을 찾는다.
- - exec [command]
기호 의미 설명 { } Place holder find가 찾아낸 파일의 이름이 들어갈 빈칸 \ Escape Character Shell에 의해 해석되지 않고 명령어에게 그대로 전달되도록 보호 ; Delimiter -exec 뒤에 붙은 명령어의 끝을 알리는 마침표 > & Redirection 결과와 에러 메시지 한꺼번에 처리할 때 사용 >>& 기존 파일 내용 뒤에 출력과 에러를 추가함
Actions 찾은 후 수행할 작업
파일을 찾은 뒤 무엇을 할지 결정한다.
- -print: 찾은 파일의 전체 경로를 화면에 출력
- -exec command {} \; : 찾은 파일들을 대상으로 특정 command를 즉시 실행, {}는 찾은 파일 이름 의미, 끝에 \;를 꼭 붙여야함
- -ok command {} \; : -exec와 같지만 실행하기 전에 "정말 실행할까?"라고 사용자에게 일일이 물어보는 것
AND OR NOT 복합 조건
- AND (공백): 조건1 조건2 처럼 공백으로 띄우면 두 조건을 모두 만족해야함
- OR(-o): 조건1 -o 조건2는 둘 중 하나만 만족
- NOT (!): !조건은 해당 조건이 아닌 파일을 찾음
Example 실전 예제
find명령어는 하위 디렉토리까지 샅샅이 뒤져 조건에 맞는 파일을 찾아내는 도구이기에 '아 그 파일이 어딨더라..'할 때 자주 쓰인다.
- 이름(name)으로 찾기
find . -name '*.m"→ 현재 디렉토리와 하위 폴더 내의 m확장자(매트랩) 파일 찾기
find . -name 'exp[1-3].dat" -print→ 범위 지정해서 exp1.dat, exp2.dat, exp3.dat만 골라서 찾기
find -iname "README.txt"→ 대소문자 구문 없이 Readme.txt, readme.txt, README.txt등을 모두 찾기
find . ! -name "*.o" -print→ object file(.o)를 제외한 모든 파일을 찾기
- 타입(type)으로 찾기
find . -type -f name "result*"→ 이름이 result로 시작하는 것들 중, 폴더는 제외하고 일반 파일만 찾아준다.
find /home/usr/research -type d -empty -delete→ 연구 디렉토리 안에 내용물이 없는 빈 디렉토리만 골라내어 삭제
find . -type f -user username→ 특정 사용자(username)가 소유한 일반 파일만 찾기
- 사용자(user)로 찾기
find . -user ejl -type f find /data -user 777→ ejl(ID: 777)라는 사용자가 만든 파일을 찾아줌
더보기명령어 평가 순서
find -name [name arguement] -file [file arguement] 처럼 여러 명령어가 쓰일때 어떤 순서로 실행될까 ?
find는 여러 조건을 나열하면 기본적으로 AND 연산으로 묶는다.
- 작동 방식: 첫 번째 조건이 맞으면 다음 조건을 검사하고 모든 조건이 만족될 때만 해당 파일을 결과에 포함
- 순서의 영향: 논리적으로 순서가 바뀌어도 결과는 동일함
결과는 동일하지만 효율적으로 코드를 실행하기 위해 권장되는 작성 순서가 있다는데 ..
- 범위 좁히기: 검색 대상을 가장 빨리 줄여줄 수 있는 조건을 먼저 씀
- 비용이 적은 검사: 파일 이름 -name또는 소유자( -user)확인은 파일의 상세 정보를 다 뒤지는 것보다 빠르기에 보통 앞에 작성한다.
- 수행할 작업: -print 나 -exec 같은 Action은 항상 조건들 뒤에 온다.
- 크기(size)로 찾기
find /home -size +100M -print→ home디렉토리에서 100MB가 넘는 대용량 파일을 찾아줌(누가 누가 서버 용량을 많이 차지하나를 볼 수 있음)
find . -type f -size -10k→ 매우 작은 텍스트 파일이나 설정 파일들만 골라낼 때 사용
find . -size +1k -size -5k→ 특정 범위의 크기 찾기(AND조합)로 크기가 1k초과 5k미만인 파일들만 골라냄
find . -size 0c→ 내용이 하나도 없는 빈 파일(0바이트) 파일을 찾을 때 유용
- 시간(mtime, atime, ctime)으로 찾기
find . -type f -mtime -1→ 최근 24시간 이내에 수정한 파일 찾기(어제부터 오늘까지 작업한 코드를 한번에 확인할 때 유용)
find /data/exp -mtime +30→ 한 달(30일) 이상손대지 않은 데이터 찾기
- 특정 파일 기준(newer)으로 찾기
find . -newer [filename] -print→ 특정 파일을 만든 시점 이후에 생성되거나 수정된 모든 파일을 찾아줌
- exec(또는 ok) 사용해보기
find . -type f -size +1M -exec cp {} ./backup/ \;→ find가 파일을 찾을때마다 cp [파일명] ./backup/ 명령을 자동으로 실행
find /data -user ejl -type -f -exec cp {} /backup \; >& error.log→ find ... : ejl 소유의 파일을 찾아서
→ -exep cp {} /backup \; : 찾은 파일을 하나씩 /backup 폴더로 복사하고
→ >& error.log: 복사 과정에서 발생한 모든 결과와 에러(ex. 용량 없음, 권한 없음)를 error.log에 저장해라
더보기일단 find명령어에서 -exec를 쓴다면 {}뒤에는 무조건 한 칸 띄우고 \;를 붙인다고 외우자
find 명령어에서 -exec뒤에 오는 명령어의 끝을 확실히 알리기 위해 ;를 쓰도록 정해두었고쉘이 ;를 가로채지 않도록 이스케이프 구문 \를 앞에 붙여준다.
{}는 find명령어가 찾은 파일의 이름을 담는 그릇 역할을 하기 때문에 절대 빠지면 안된다 !
find는 조건을 만족하는 파일을 하나씩 찾아내고 이를 -exec를 통해 파일의 이름을 실행할 명령어 (ex. rm, cp)에게 전달해주는 역할을 한다.
예를 들어, find . -name "*log" -exec rm \;라고만 쓴다면, 리눅스는 지워라!(rm)이라는 명령은 받았지만 뭘 ? 지워야할 지 모르는 상태가 된다. 결국 find의 결과를 {}가 받아주고 이를 -exec명령어에서 인자로 처리하는 것임 !!
- grep 명령어와 find 명령어 함께 사용하기
grep: 파일 속에서 특정 단어를 찾을 때 필수적인 도구
옵션 기능 설명 -i ignore-case 검색하려는 구문의 대소문자를 구분하지 않음 -v Invert Match 특정 단어가 포함되지 않은 줄만 보여줌 -n Line Number 찾은 내용이 파일의 몇 번째 줄에 있는지 번호를 표시 -r Recursive 하위 폴더의 모든 파일까지 샅샅이 뒤져서 찾음 grep -i 'error' log.txt→ 'error'라는 단어가 들어간 모든 줄 찾기
grep -i 'sensor' *→ 현재 디렉토리의 모든 파일에서 'sensor'단어 찾기
그럼 실전에서 많이 쓰이는 파이프라인을 이용하여 find명령어와 함께 사용하는 방법을 알아보자
특정 문자열을 가지고 있는 파일명을 알고 싶을 땐, grep한 결과를 find하면 된다.
→ svpos라는 서브루틴을 사용하는 main파일이 무엇인지 알고싶어 !
grep -i 'svpos' * | find -name 'sndemo*' ./sndemo15.m ./sndemo09.m ./sndemo03.m ./sndemo06.m ./sndemo17.m ./sndemo19.m ./sndemo05.m ./sndemo40_sw.m ./sndemo10.m ./sndemo41.m ./sndemo14.m ./sndemo39.m ./sndemo38.m ./sndemo12.m ./sndemo02.m ./sndemo08.m ./sndemo20.m grep: ./sndemo18.m subroutine./sndemo11.m반대로 파일 중, 특정한 문자열을 가진(예를 들어 사용자 명이 담긴) 파일만 골라내고 싶을 땐 find | grep을 사용하면 된다.
→ 메인 파일 중, 10-20번 파일이 모두 있는지 알고싶어 !
find -name 'sndemo*' -type f | grep -E 'sndemo(1[0-9]|20)' | sort ./sndemo10.m ./sndemo11.m ./sndemo12.m ./sndemo15.m ./sndemo16.m ./sndemo17.m ./sndemo18.m ./sndemo19.m ./sndemo20.m이러한 결과를 통해 13,14 파일이 없다는 사실을 알 수 있음
find와 grep은 처음에 배울 때 헷갈리지만 잘 알아두면 굉장히 강력한 명령어이다.
잘 익혀서 써보자 ..^___^
'IT Study > OS' 카테고리의 다른 글
리눅스에서 원격 접속 편하게 하자, config 파일 작성하는 방법 (0) 2026.03.02 [Linux] sed 명령어에 대해 알아보자 (0) 2026.01.26 [Linux] awk명령어에 대해 알아보자 (0) 2026.01.23 MAC에서 Windows 원격접속하기(리눅스 서버 원격 접속, Windows App) (0) 2025.12.31 [OS] Window를 밀고 CentOS를 설치해보자 (0) 2025.11.24 - -name filename