find
≡ 목차 (Table of Contents)
find
find
는 특정 디렉터리에서 파일이나 디렉터리를 검색하기 위한 CLI 도구다.
기본 사용법
현재 디렉터리에서 특정 파일 검색하기
find . -name "somename.ext"
위 명령은 현재 디렉터리에서 somename.ext
라는 파일이 어디에 있는지 검색한다. 현재 디렉터리 뿐만 아니라 현재 디렉터리 아래의 모든 디렉터리를 재귀(recursive)적으로 검색한다.
특정 디렉터리에서 특정 파일 검색하기
find /foo/bar "somename.ext"
위 명령은 /foo/bar
디렉터리 아래에서 somename.ext
파일을 검색한다.
검색 패턴
찾을 패턴으로 와일드카드를 사용할 수도 있다.
find . -name "*.py"
위 명령은 현재 디렉터리 아래의 모든 확장자가 .py
인 파일들을 검색합니다.
대소문자 무시하기
기본적으로 이 도구는 대소문자를 가린다. 만약 대소문자를 가리지 않으려면 iname
옵션을 사용할 수 있다.
find . -iname "readme"
검색 종류 지정하기
만약 특정한 종류만 검색하고 싶다면 type
옵션을 사용할 수 있다.
find . -name "lib" -type d
type
으로 d
옵션을 주면 디렉터리 만을 검색한다. 반대로 f
로 대체하면 파일 만을 검색한다.
이 외에도 파일의 시간 정보, 퍼미션, 사이즈 등등 다양한 옵션으로 검색이 가능하다.
검색 내용으로 특정 처리하기(exec)
-exec
옵션은 검색된 내용을 이용해 외부 도구를 실행시킬 수 있게 할 수 있다.
예를 들어 확장자가 .tmp
라는 파일을 검색해서 모두 삭제하고 싶다면 아래처럼 할 수 있다.
find . -name "*.tmp" -exec rm {} \;
-exec
옵션 다음에는 실행시킬 커맨드가 나온다. 여기서 {}
는 실제로 검색된 각 파일의 경로가 치환되는 부분이다.
-exec
커맨드는 세미콜론 ;
을 명시한 부분까지 인식한다. 그런데 위 커맨드는 \;
로 세미콜론 앞에 백슬래시를 표시하고 있다. 이는 셸이 세미콜론을 명령어를 끊는 특수한 용도로 사용하기 때문에 세미콜론을 raw text 로 넘겨주기 위해 이스케이프(escape)한 것이다. 잘 이해가 안 된다면 그냥 -exec
옵션의 끝 부분에는 반드시 \;
가 들어가야 한다고 생각하자.
특정 크기 이상의 파일 검색하기
아래 커맨드는 파일 사이즈가 1기가 이상인 파일을 검색한다.
find . -type f -size +1G
-type f
를 이용해 파일만 필터하는 이유는 당연하게도 디렉터리는 크기를 가지지 않기 때문이기도 하다.
사이즈는 +1G
혹은 +1M
등 다양한 단위가 존재한다.