나스나 서버에서 파일 관리를 할 때 자주 사용하는 명령어가 find이다. 기억하려고 해도 자꾸 잊어버리는 탓에 기록용으로 남겨두고자 한다.

1. 이름으로 찾기(-name)

이름으로 찾기는 폴더인지 파일인지 구별하지 않는다. 따라서 정확한 서칭이 필요하다면 이름으로만 찾으면 안 된다.

찾고자 하는 파일 이름을 gumu.jpg 라고 할 때 현재 디렉토리에서 찾을 때

find . -name gumu.jpg

고자 하는 파일 이름을 gumu.jpg 라고 할 때 /volume1 디렉토리에서 찾을 때

find /volume1 -name gumu.jpg

대소문자 구분 없이 gumu.jpg를 현재 디렉토리에서 찾을 때

find . -iname gumu.jpg

2. 파일 찾기(-type f)

찾고자 하는 파일 이름을 gumu.zip 라고 하고 현재 디렉토리에서 찾을 때
파일의 타입인 f를 명시해준다.

find . -type f -name gumu.zip

현재 디렉토리 내 모든 .zip파일 찾기

find . -type f -name "*.zip"

현재 디렉토리 내 모든 .zip파일 또는 .pdf파일을 한꺼번에 찾기
(OR을 의미하는 -o 를 붙여준다)

find . -type f \( -name "*.zip" -o -name "*.pdf" \)

3. 폴더 찾기(-type d)

여기서는 디렉토리보다는 폴더라고 하는 것이 윈도우 사용자에게 익숙할 것 같아서 폴더 찾기라고 명명한다.

현재 디렉토리 내 모든 폴더 찾기

find . -type d #주의! 이 명령어는 현재 폴더도 포함한다.

#결과는 아래와 같이 나온다.
.
./01test
./02test
./03test

현재 폴더를 제외하고 디렉토리 내 모든 폴더 찾기

find . ! -path . -type d

#결과는 아래와 같이 나온다.
./01test
./02test
./03test

현재 디렉토리 상에서 탐색 단계별로 폴더 찾기
예를 들어, /volume1/Test/Practice라는 폴더 구조로 되어 있고 현재 디렉토리는 /volume1 일 때 Test폴더 안에 있는 폴더만 찾고 싶다면 최소 2단계는 내려가고 더 이상의 탐색을 하면 안 된다.
최소한의 depth설정을 -mindepth
최대한의 depth설정을 -maxdepth로 설정해준다.
파일 찾기에서도 응용이 가능하다.

 find . -mindepth 2 -maxdepth 2 -type d

#이렇게 되면 Test내 폴더만 탐색하고 Test내 폴더 안에 있는 폴더는 탐색하지 않는다.

gumu라는 폴더 찾기

find . -type d -name "gumu"

4. find의 응용(-exec)

find 명령어를 사용하여 나오는 결과값은 {}로 다양하게 활용 가능하다. -exec 뒤에는 우리가 평소에 쓰던 쉘 스크립트를 넣을 수 있다. 예를 들어서 특정 폴더 안에 있는 모든 폴더를 삭제하고 싶다면 아래와 같은 스크립트를 사용하면 된다.
find . -mindepth 2 -type d -exec rm -r {} \;

-exec 뒤에 디렉토리 삭제를 위한 rm -r 을 넣었고 그 뒤에 {}를 넣어주면 find명령어로 찾은 결과값이 rm -r 뒤에 순차적으로 들어가게 된다. 반드시 명령어 끝에는 (공백)\;를 넣어주어야 한다.

만일 특정 경로에 있는 폴더들을 압축하고 싶다면 아래와 같은 스크립트를 사용하자.

find . -mindepth 2 -type d -exec zip -r {}.zip {} \;


4개의 댓글

hot shot bald cop · 2022-04-09 2:16 오전

I was just telling my friend about that.

hotshot bald cop · 2022-04-12 7:12 오전

I didn’t know that.

hotshot bald cop · 2022-04-12 7:24 오전

Wonderful views on that!

hotshot bald cop · 2022-05-07 10:10 오후

I was just telling my friend about that.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다