나스나 서버에서 파일 관리를 할 때 자주 사용하는 명령어가 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 {} \;
0개의 댓글