2023년 9월 15일 금요일

리눅스 find 명령어 사용법

리눅스 find 명령어 사용법

리눅스 find 명령어 사용법

find는 리눅스에서 파일 및 디렉토리를 검색할 때 사용하는 명령어입니다. find 명령어는 진짜 자주 쓰는 명령어인데 왜 맨날 기억이 잘 안 나는지 매번 검색하게 만듭니다. 이번기회에 핵심만 정리해서 기억이 잘났으면 좋겠습니다.

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

# 예) 현재 위치에서 .log가 들어가는 파일 모드 찾기
$ find . -name *.log


옵션(option)

- P : 심볼릭 링크를 따라가지 않고, 심볼릭 링크 자체 정보 사용.
- L : 심볼릭 링크에 연결된 파일 정보 사용.
- H : 심볼릭 링크를 따라가지 않으나, Command Line Argument를 처리할 땐 예외.
- D : 디버그 메시지 출력.


경로(path)

find 명령어는 경로를 인자로 받으며, 해당 경로를 기준으로 하위 디렉토리를 검색하여 해당 파일 또는 디렉토리를 찾는다.

상대 경로, 절대 경로 모두 가능하며 대부분의 리눅스의 경우 이 경로 인자 값을 생략한다면 현재 위치(.)를 입력받은 것으로 간주한다. 유닉스(Unix)의 경우 이 경로를 입력받지 않으면 명령어 실행이 안된다.

- . : 현재 디렉토리를 의미.
- ~ : 홈 디렉토리를 의미
- / : 루트 디렉토리를 의미


표현식(expression)

- name     : 지정된 문자열 패턴에 해당하는 파일 검색.
- empty	   : 빈 디렉토리 또는 크기가 0인 파일 검색.
- delete   : 검색된 파일 또는 디렉토리 삭제.
- exec     : 검색된 파일에 대해 지정된 명령 실행.
- path     : 지정된 문자열 패턴에 해당하는 경로에서 검색.
- print    : 검색 결과를 출력. 검색 항목은 newline으로 구분. (기본 값)
- print0   : 검색 결과를 출력. 검색 항목은 null로 구분.
- size     : 파일 크기를 사용하여 파일 검색.
- type     : 지정된 파일 타입에 해당하는 파일 검색.
- mindepth : 검색을 시작할 하위 디렉토리 최소 깊이 지정.
- maxdepth : 검색할 하위 디렉토리의 최대 깊이 지정.
- atime    : 파일 접근(access) 시각을 기준으로 파일 검색.
- ctime    : 파일 내용 및 속성 변경(change) 시각을 기준으로 파일 검색.
- mtime    : 파일의 데이터 수정(modify) 시각을 기준으로 파일 검색.


find 파일명으로 찾기 (-name) 사용 예시

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

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

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

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

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


find 타입으로 찾기 (-type) 사용 예시

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

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

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

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


find 파일 크기로 찾기 (-empty, -size) 사용 예시

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

# 현재 디렉토리에서 빈 디렉토리이거나 크기가 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


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

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

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

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

exec를 사용하여 검색한 대상에 추가 명령어를 수행할 수도 있습니다.