본문 바로가기
Develops/Linux

[LINUX] find 명령어 (파일명, 내용 검색 활용)

by SLOTH91 2024. 3. 30.
반응형

find는 리눅스 파일 시스템에서 파일을 검색하는 데 사용되는 명령어이다.

많이 쓰이는 명령어 중의 하나이므로 숙지해두면 유용하다.

 

기본문법

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

 

옵션

옵션 설명
-H 심볼릭 링크를 따라가지 않으나, Command Line Argument를 처리할 땐 예외.
-P 심볼릭 링크를 따라가지 않고, 심볼릭 링크 자체 정보 사용.
-L 심볼릭 링크에 연결된 파일 정보 사용.
-D 디버그 메시지 출력.
    [옵션]       [설명]
    help         디버깅 옵션을 설명.
    exec         -exec, -execdir, -ok, -okdir 관련 진단 정보를 표시.
    opt           최적화와 관련된 진단 정보 표시.
    rates        각 속성의 성공한 빈도를 나타냅니다.
    tree          표현식 트리를 표시.
    search     디렉토리 트리를 자세히 탐색.
    stat          stat(2), lstat(2)에 대한 추적을 호출한다.

 

표현식

표현식 설명
-name 지정된 문자열 패턴에 해당하는 파일 검색. (가장 많이 쓰이는 옵션)
-iname 대소문자 구별 안하고 이름으로만 찾을 때 (insensitive의 약자)
-user 지정한 사용자의 파일이나 디렉터리를 찾는다 (위에가 이름가지고 찾았다면 이거는 사용자 기준)
-group 지정한 그룹 소유의 파일이나 디렉터리를 찾는다
-uid 지정한 UID소유의 파일이나 디렉터리를 찾는다 (아이디번호로 찾기)
-gid 지정한 UID 소유의 파일이나 디렉터리를 찾는다 (그룹번호로 찾기)
-perm 지정한 허가권 값을 갖는 파일이나 디렉터리를 찾는다 (permission의 약자)
ex) -perm 755 : 퍼미션 값이 755로 설정된 파일이나 디렉터리
-empty 빈 디렉토리 또는 크기가 0인 파일 검색.
-delete 검색된 파일 또는 디렉토리 삭제.
-exec find로 파일을 찾고 바로 연계하여 어떠한 명령을 내릴 수 있는 옵션. 
결과값은 {} 기호로 표시하고 \;로 끝내야 함.
-ls 'ls -l'과 같은 역할
-path 지정된 문자열 패턴에 해당하는 경로에서 검색.
-print 검색 결과를 출력. 검색 항목은 newline으로 구분. (기본 값)
-print0 검색 결과를 출력. 검색 항목은 null로 구분.
-size n 파일 크기를 사용하여 파일 검색.
+n은 n블록보다 큰 파일을 찾으며 (greater)
 -n은 n블록보다 작은 파일을 찾는다 (less)

보통 nc라는 형태로 많이 사용되는데
n은 문자 길이의 파일을 의미하고,
c는 character를 의미하여 1문자는 1바이트이므로 보통 바이트 단위로 인식해서 사용한다.
-type 지정된 파일 타입에 해당하는 파일 검색.
 -  d: 디렉터리
 -  f: 일반 파일
 -  l: 링크 파일
 -  b: 블록 디바이스
 -  c: 캐릭터 디바이스
 -  p:파이프 디바이스
 -  s:소켓 파일
    (주로 -type f 옵션이나 -type d 옵션을 많이 쓴다)
-mindepth n 검색을 시작할 하위 디렉토리 최소 깊이 지정.
-maxdepth n 검색할 하위 디렉토리의 최대 깊이 지정.
-prune 찾은 결과 중 디렉터리가 해당될 때 그 디렉터리 이름만 출력
(하위 디렉터리에 해당되는게 있어도 들어가서 찾지 않는다)
-newer 옵션 뒤에 적힌 파일보다 최근에 변경된 파일을 찾는다
ex) find -newer 'abc.c'abc
      파일보다 최근에 변경된 파일을 찾음
-cnewer 앞의 newer가 내용 변경이라면 cnewer라면 파일 상태
2>/dev/null 맨 뒤에 이 옵션을 붙이면 퍼미션 접근 불가한것은 화면에 출력하지 않는다.
-atime n 파일 접근(access) 시각을 기준으로 파일 검색.
  n   : n일 이전에 접근한 파일 찾기 (exactly)
+n   : n보다 오래된 녀석들 기준 (greater)
 -n   : n일부터 지금까지 즉 n일 내에 접근했던 파일들을 불러준다. (less)
-ctime n 파일 내용 및 속성 변경(change) 시각을 기준으로 파일 검색.
-mtime n 파일의 데이터 수정(modify) 시각을 기준으로 파일 검색.
-mmin n mmin은 분이 기준 (mtime은 기준이 day)

 

표현식 연산자

표현식 연산 설명
(expression) expression 우선순위 지정.
!expression
-not expression
expression 결과에 NOT 연산.
expression -a expressionexpression
-and expressionexpression
expression
expression 간 AND 연산.
expression -o expressionexpression
-or expression
expression 간 OR 연산.

 

사용 예시

예시1. 파일명으로 찾기 (-name)

# 현재 디렉토리에서 test가 포함되는 파일 찾기
find . -name "*test*"

# 현재 디렉토리에서 .txt 확장자 모두 찾기
find . -name "*.txt"

# 현재 디렉토리에서 .txt 확장자 파일 검색 후 모두 삭제
find . -name "*.txt" -delete

# 현재 디렉토리에서 test로 시작되는 파일 찾기
find . -name "test*"

# 현재 디렉토리에서 test로 끝나는 파일 찾기
find . -name "*test"

 

 

예시2.  타입으로 찾기 (-type)

# 현재 디렉토리에서 모든 디렉토리 찾기
find . -type d

# 현재 디렉토리에서 test가 들어가는 디렉토리 찾기
find . -name "*test*" -type d

# 현재 디렉토리에서 모든 파일 찾기
find . -type f

# d : 디렉토리
# f : 일반적인 파일
# l : 심볼릭 링크

 

 

예시3.  파일 크기로 찾기 (-empty, -size)

# 현재 디렉토리에서 빈 디렉토리이거나 크기가 0인 파일 검색
find . -empty

# 현재 디렉토리에서 test가 들어가는 빈 디렉토리이거나 크기가 0인 파일 검색하여 삭제
find . -name "*test*" -empty -delete

# 현재 디렉토리에서 1024byte인 파일 검색
find . -size 1024c

# 현재 디렉토리에서 1024byte보다 큰 파일 검색
find . -size +1024c

# 현재 디렉토리에서 1024byte보다 작은 파일 검색
find . -size -1024c

# 현재 디렉토리에서 1kb보다 크고 10kb보다 작은 파일 검색
find . -size +1k -size -10k

# b : 블록단위
# c : byte
# k : kbyte
# w : 2byte 워드

 

 

예시4.  검색된 파일에서 추가 명령 실행하기 (-exec)

# 현재 디렉토리에 "test"가 들어가는 파일을 찾아서 상세정보 출력
find . -name "*test*" -exec ls -l {} \;

# 현재 디렉토리에 있는 파일에서 "test"가 들어가는 내용 찾기 
find . -type f -exec grep "test" {} \;

# 현재 디렉토리에 ".txt" 확장자를 찾아서 모두 삭제
find . -name "*.txt" -exec rm {} \;

 

 

[참고]

https://inpa.tistory.com/entry/LINUX-📚-find-명령어-정복하기-파일-검색 [Inpa Dev 👨‍💻:티스토리]

https://coding-factory.tistory.com/804

 

 

 

반응형