find
명령어find
명령어는 리눅스 파일 시스템에서 파일 또는 디렉토리를 검색하는 데 사용하는 명령어이다.
다양한 표현식을 사용해 원하는 파일 또는 디렉토리의 목록을 찾을 수 있다.
$> find [option] [path] [expression]
아래는 많이 사용하는 옵션을 정리해두었다.
-P
: 심볼릭 링크(symbolic link)를 따라가지 않고, 심볼릭 링크 자체 정보 사용-L
: 심볼릭 링크(symbolic link)에 연결된 파일 정보 사용-H
: 심볼릭 링크(symbolic link)를 따라가지 않지만, Command Line Argument
를 처리할 때는 예외-D
: 디버그 메세지 출력find
명령어는 경로를 인자로 받으며, 해당 경로를 기준으로 하위 디렉토리를 검색하여 해당 파일 또는 디렉토리를 찾는다.
상대 경로, 절대 경로 모두 가능하며 대부분의 리눅스의 경우 이 경로 인자 값을 생략한다면 현재 위치(.)를 입력받은 것으로 간주한다.
유닉스(Unix)의 경우 이 경로를 입력받지 않으면 명령어 실행이 안된다.
아래는 많이 사용하는 표현식을 정리해두었다.
-name
: 지정된 문자열 패턴에 해당하는 파일 검색-empty
: 빈 디렉토리 또는 크기가 0인 파일 검색-delete
: 검색된 파일 또는 디렉토리 삭제-exec
: 검색된 파일에 대해 지정된 명령 실행-path
: 지정된 문자열 패턴에 해당하는 경로에서 검색-print
: 검색 결과를 출력하며, 검색 항목은 newline
으로 구분 (default)-print0
: 검색 결과를 출력하며, 검색 항목은 null
로 구분-size
: 파일 크키를 사용해 파일 검색-type
: 지정된 파일 타입에 해당하는 파일 검색-mindepth
: 검색을 시작할 하위 디렉토리 최소 깊이 지정-maxdepth
: 검색을 하위 디렉터리의 최대 깊이 지정-atime
: 파일 접근(access) 시각을 기준으로 파일 검색-ctime
: 파일 내용 및 속성 변경(change) 시각을 기준으로 파일 검색-mtime
: 파일의 데이터 수정(modify) 시각을 기준으로 파일 검색-user
: 해당 유저에 속한 파일 검색-cnewer
: 해당 파일보다 최근에 수정된 파일 검색표현식을 사용할 때 연산자(Operator)를 사용해 "2개 이상의 표현식"을 조합할 수 있다.
find
명령어에서 사용할 수 있는 연산자는 아래와 같다.
표현식 | 설명 |
---|---|
(expression) | expression 우선순위 지정 |
!expression -not expression | expression 결과에 NOT 연산 |
expression -a expression expression -and expression expression expression | expression 간 AND 연산 |
expression -o expression expression -or expression | expression 간 OR 연산 |
find
: 현재 디렉토리의 파일 및 디렉토리 리스트 출력find -print0
: 현재 디렉토리의 모든 내용을 줄 바꿈 없이 출력find [PATH]
: PATH
에 있는 파일 및 디렉토리 리스트 표시find . -name [FILE]
: 현재 디렉토리 아래 모든 파일 및 하위 디렉토리 검색find / -name [FILE]
: 전체 시스템(루트(root) 디렉토리)에서 파일 이름으로 검색find . -name "STR*"
: 파일 이름이 특정 문자열로 시작하는 파일 검색find . -name "*STR*"
: 파일 이름에 특정 문자열이 포함된 파일 검색find . -name "*STR"
: 파일 이름이 특정 문자열로 끝나는 파일 검색find . -empty
: 빈 디렉토리 또는 크기가 0인 파일 검색find . -name TMP -empty
: TMP라는 이름의 빈 디렉토리 또는 크기가 0인 파일 검색find . -name "*.EXT" -delete
: 특정 확장자를 가진 모든 파일 검색 후 삭제한다. 만약, 검색 대상에 디렉토리가 포함된 경우, 디렉토리가 비어 있지 않다면 해당 디렉토리는 삭제되지 않는다.find . -name [FILE] -print0
: 검색된 결과를 줄 바꿈 없이 출력find . -name [FILE] -print
: 검색된 결과를 줄 바꿈으로 구분하여 출력find . -name [FILE] -type f
: -type
표현식을 사용해 파일 종류를 지정하여 검색한다. 예시는 일반 파일을 검색하는 예이다.b
: 블록 특수 파일(block special file) / 블록 장치 파일(block device file) -> 유닉스(Unix) 계열c
: 문자 특수 장치(character special file) / 문자 장치 파일(character device file) -> 유닉스(Unix) 계열d
: 디렉토리(directory)f
: 일반 파일(regular file)l
: 심볼릭 링크(symbolic link)p
: FIFO 파일s
: 소켓(socket)find . -size +[N]c -and -size -[M]c
: 파일 크기를 사용하여 파일 검색c
또는 k
를 붙여 바이트(bytes) 단위 또는 킬로바이트(kbytes) 단위로 값을 지정할 수 있다. (b
: block, c
: bytes, w
: 2bytes, k
: kbytes, M
: mbytes, G
: gbytes)-size
표현식을 2개 조합하여 범위를 지정할 수도 있다. 이때 크기 값 앞에 +(초과)
또는 -(미만)
기호를 사용한다.find . -size 1024c
: 파일 크기가 1024 바이트인 파일 검색find . -size +1024c
: 파일 크기가 1024 바이트를 초과하는 파일 검색find . -size -1024c
: 파일 크기가 1024 바이트 미만인 파일 검색find . -size +1024c -size -2048c
: 파일 크기가 1024 바이트 초과, 2048 바이트 미만인 파일 검색find . -name [FILE] -exec ls -l {} \;
: 검색된 파일에 대한 상세 정보 출력 (find + ls)-exec
표현식은 find
명령어로 검색된 결과를 사용해 다른 명령을 싱행할 수 있게 만들어 준다.find . -name [FILE] -exec wc-l {} \;
: 검색된 파일의 라인 수 출력 (find + wc)-exec
표현식은 find
명령어로 검색된 결과를 사용해 다른 명령을 싱행할 수 있게 만들어 준다.find . -name [FILE] -exec grep "STR" {} \;
: 검색된 파일에서 문자열 찾기 (find + grep)-exec
표현식은 find
명령어로 검색된 결과를 사용해 다른 명령을 싱행할 수 있게 만들어 준다.find . -name [FILE] > [SAVE_FILE]
: 검색 결과를 파일로 저장 (find, redirection)find . -name [FILE] 2> /dev/null
: 검색 중 에러 메시지 출력하지 않기 (find, redirection)/dev/null
로 redirection 시킨다.find . -maxdepth 1 -name [FILE]
: 하위 디렉토리 검색하지 않기-maxdepth
표현식을 사용해 검색할 하위 디렉토리의 깊이를 제한할 수 있다.-maxdepth
는 다른 표현식보다 앞에 사용해야 한다.find . -name [FILE] -exec cp {} [PATH] \;
: 검색된 파일 복사 (find + cp)-exec
표현식은 find
명령어로 검색된 결과를 사용해 다른 명령을 싱행할 수 있게 만들어 준다.