find 명령어
find 명령어는 파일이나 디렉터리를 검색하는 커맨드라인 툴이다. grep이 파일의 내용을 검색하는 반면, find는 파일이나 디렉터리 자체를 검색한다. 다양한 기준과 조건으로 파일 시스템을 탐색할 수 있고, 검색한 파일에 대해 다양한 작업을 수행할 수 있다. find는 파일 이름, 파일 유형, 파일 크기, 수정 시간, 권한 등 다양한 속성으로 파일을 찾을 수 있다. 리눅스를 사용하면서 어떤 파일을 찾는 일은 자주 발생하므로 옵션과 사용법을 익히면 좋다.
find는 다음과 같이 사용한다.
find [option] [path] [expression]
find 명령어의 주요 옵션
- -L : 심볼릭 링크의 대상 파일을 쫓는다. 즉, 파일을 다루거나 정보를 출력할 때 심볼릭 링크의 대상 파일에 대해 작업한다.
- -P : 심볼릭 링크의 대상 파일이 아닌 심볼릭 링크 자체에 대해 작업한다. 심볼릭 링크에 대한 옵션이 주어지지 않으면 이 옵션을 기본으로 한다.
파일 검색을 시작할 경로를 하나 이상 입력해야 한다. 입력된 경로의 하위 디렉터리는 모두 검색 대상에 포함된다. 하위 디렉터리의 깊이를 조절하려면 표현식에서 깊이를 지정해야 한다.
find 표현식
표현식은 파일을 어떻게 찾고, 찾은 파일을 어떻게 다룰지에 대한 부분을 정의한다. find를 실행할 때 경로만 지정하고 표현식을 지정하지 않으면 해당 경로 하위의 모든 파일을 화면에 출력한다. 검색 조건을 입력하지 않아서 모든 파일이 일치되기 때문이다.
find 주요 표현식
- -name [pattern] : 주어진 패턴과 일치하는 파일을 찾는다.
- -type [type] : 특정 유형의 파일을 찾는다. 유형은 다음과 같다.
- f : 일반 파일
- d : 디렉터리
- l : 심볼릭 링크(소프트 링크) 파일
- s : 소켓 파일
- b : 블록 디바이스 파일
- c : 문자 디바이스 파일
- p : 명명된 파이프(named pipe) 파일
- -size [size] : 특정 크기의 파일을 찾는다. -또는 +를 사용해 미만/초과를 지정할 수 있다. 파일 크기는 숫자 + 단위로 표기한다.
- c : 바이트(byte)
- k : 킬로 바이트(kilo byte)
- M : 메가 바이트(mega byte)
- G : 기가 바이트(giga byte)
- -perm [permission] : 특정 권한을 가진 파일을 찾는다.
- -user [user] : 특정 사용자가 소유한 파일을 찾는다.
- -mtime [days] : 마지막 수정일에서 지정한 일수가 지난 파일을 찾는다.
- -exec [command] {} \; : 찾은 파일에 특정 명령을 실행한다. { } 부분이 찾은 파일 이름으로 대체돼 실행된다.
- -maxdepth [level] : 검색할 디렉터리의 최대 깊이(레벨)를 지정한다.
- -mindepth [level] : 검색을 시작할 최소 디렉터리 깊이(레벨)를 지정한다.
- -printf [format specifier] : 검색된 파일의 정보를 형식 한정자(format specifier)에 맞게 화면에 출력한다.
- %p : 파일이름
- %s :파일 크기
- %u :파일의 소유자 이름
- %g : 파일의 그룹 이름
- %i : 파일의 아이노드
- %M : 파일 권한을 rxwrxwrxw 형태로 출력
- \n : 개행 문자
현재 디렉터리 하위의 파일 목록을 단순히 출력할 때는 다음과 같이 사용한다.
find .
파일과 디렉터리 검색하기
/etc 디렉터리에서 find로 여러 파일을 검색해 보자. /etc 디렉터리 하위에는 권한이 있어야 읽을 수 있는 파일이 많으므로 sudo를 사용하자.
sudo find /etc -name "passwd"
'passwd'라는 단어가 포함된 파일명을 검색할 때는 앞뒤에 *를 붙여주자.
sudo find /etc -name "*passwd*"
검색된 파일에 특정 명령을 실행해 보자. -exec 표현식을 사용하면 검색된 파일별로 지정된 명령을 실행할 수 있다. {} 부분은 검색된 파일 이름으로 대체된다. 예제로 검색된 파일에 stat 명령어를 실행해 보자.
sudo find /etc -name "passwd" -exec stat {} \;
디렉터리를 검색해 보자. 디렉터리를 지정하려면 -type 표현식에서 d를 설정하면 된다.
sudo find /etc -type d
sudo find /etc -maxdepth 1 -type d
조건에 해당하는 크기의 파일을 검색할 수도 있다. -size 표현식으로 100KB 이상의 파일을 찾아보자.
sudo find /etc -size +100k
-printf 표현식을 사용해 원하는 형태로 결과를 출력할 수 있다. 다음과 같이 작성하면 검색된 파일을 파일 이름(%p): 파일 크기(%s) 형태로 결과를 출력한다.
sudo find /etc -size +10k -printf "%p:%s\n"
'프로그래밍 > 리눅스' 카테고리의 다른 글
리눅스 필수 커맨드라인 툴 wc (0) | 2025.02.13 |
---|---|
리눅스 필수 커맨드라인 툴 stat (0) | 2025.02.12 |
리눅스(Linux) &>와 2>&1 차이점에 대해서 (0) | 2025.02.10 |
리눅스 필수 커맨드라인 툴 grep (0) | 2025.02.10 |
|이 대체 뭐야? 리눅스(Linux) 파이프라인(Pipeline)을 알아보자 (0) | 2025.02.09 |
댓글