find 명령어의 기본적인 사용법을 소개합니다.
- 탐색
- 삭제
탐색
우선 다음과 같은 파일과 폴더들이 있다고 가정합니다.
$ tree
.
├── test1
│ └── 123.log
├── test1.txt
├── test2
│ └── 111.log
├── test2.txt
├── test3
│ └── 333.log
└── test3.txt
find를 이용하여 간단한 파일을 찾을 때는 다음과 같은 명령어를 사용합니다.
여기서 starting point
는 탐색할 폴더의 경로입니다.
$ find [starting-point...] -name "file name"
예를 들어 다음과 같이 탐색 경로를 .
로 설정하면 현재 경로에 있는 모든 파일들을 탐색합니다.
$ find . -name "*.log"
./test2/111.log
./test1/123.log
./test3/333.log
만약 다음과 같이 탐색 경로를 생략하면 현재 경로를 기준으로 탐색을 합니다.
$ find -name "*.txt"
./test2.txt
./test1.txt
./test3.txt
다음과 같이 1개 이상의 탐색 경로를 입력할 수 있습니다.
즉, 아래 명령어는 /user
, /home
, /tmp
경로에서 jar 파일을 찾습니다.
$ find /user /home /tmp -name "*.jar"
/home/js/apps/idea-IC-203.5981.155/lib/jshell-frontend.jar
/home/js/sources/openjdk-jdk8u/jdk/test/tools/launcher/UnicodeTest.jar
....
Case Insensitive
find 명령어는 기본적으로 대소문자를 구분하여 탐색합니다.
따라서 다음과 같이 txt
와 TXT
에 대한 탐색 결과가 달라질 수 있습니다.
$ find -name "*.txt"
./test2.txt
./test1.txt
./test3.txt
$ find -name "*.TXT"
만약 대소문자를 구분하지 않고 찾고 싶다면 -iname
옵션을 사용하면 됩니다.
$ find -iname "*.TXT"
./test2.txt
./test1.txt
./test3.txt
max depth와 min depth
탐색 경로를 설정하면, 그 경로 아래에 있는 모든 파일을 탐색합니다.
디렉토리의 깊이(depth)를 설정하여, 그 이하 또는 그 이상의 파일들은 찾고 싶지 않을 때가 있습니다.
이럴 때는 -maxdepth
와 -mindepth
옵션을 사용하여 범위를 지정해줄 수 있습니다.
다음과 같은 구조의 디렉토리가 있다고 가정합니다.
$ tree
.
├── test1
│ ├── 123.log
│ └── test4
│ ├── 4555.log
│ └── test5
│ └── 666.log
├── test1.txt
├── test2
│ └── 111.log
├── test2.txt
├── test3
│ └── 333.log
└── test3.txt
maxdepth
다음과 같이 최대 depth를 2로 설정하면, depth가 2 이하인 파일들을 대상으로 탐색합니다. (depth 0
은 현재 경로를 의미합니다.)
$ find . -maxdepth 2 -name "*.log"
./test2/111.log
./test1/123.log
./test3/333.log
mindepth
다음과 같이 최소 depth를 3으로 설정하면, depth가 3 이상인 파일들을 대상으로 탐색합니다.
$ find . -mindepth 3 -name "*.log"
./test1/test4/4555.log
./test1/test4/test5/666.log
에러 로그 출력하지 않기
폴더가 존재하지 않거나 권한이 없을 때 다음과 같이 에러 로그가 출력됩니다. 에러 로그가 매우 많이 출력되서 탐색 결과를 보는 것을 어렵게 만들 때가 있습니다.
$ find /user /tmp -name "*.jar"
find: ‘/user’: No such file or directory
find: ‘/tmp/systemd-private-9f49ea226b4d4974860461c1ab2610d8-upower.service-ts25lg’: Permission denied
find: ‘/tmp/systemd-private-9f49ea226b4d4974860461c1ab2610d8-switcheroo-control.service-tftxRh’: Permission denied
find: ‘/tmp/systemd-private-9f49ea226b4d4974860461c1ab2610d8-systemd-resolved.service-QzA0Bf’: Permission denied
이럴 때는 다음과 같이 2> /dev/null
으로 에러 로그는 터미널에 출력되지 않도록 만들 수 있습니다.
$ find /user /tmp -name "*.jar" 2> /dev/null
특정 형식의 파일만 찾기
특정 이름의 디렉토리를 찾거나, 특정 이름의 파일을 찾고 싶을 때가 있습니다.
이럴 때는 -type
명령어를 사용하면 됩니다. 다음과 같은 옵션을 추가하면 됩니다.
-type d
: Directory를 대상으로 탐색을 수행합니다.-type f
: 일반적인 File을 대상으로 탐색을 수행합니다.
위의 옵션을 사용하여 탐색하면 다음과 같은 결과가 출력됩니다.
$ ls
test1 test1.txt test2 test2.txt test3 test3.txt
$ find . -type d -name "test*"
./test2
./test1
./test3
$ find . -type f -name "test*"
./test2.txt
./test1.txt
./test3.txt
type에 대한 더 많은 옵션은 find의 man page를 참고하시면 됩니다.
-type c
File is of type c:
b block (buffered) special
c character (unbuffered) special
d directory
p named pipe (FIFO)
f regular file
l symbolic link;
s socket
D door (Solaris)
삭제
find로 원하는 파일을 찾고 그 파일을 삭제하고 싶을 때가 있습니다.
find 명령어 마지막에 -delete
옵션을 추가하면 검색된 파일들이 삭제됩니다.
$ ls
test1 test1.txt test2 test2.txt test3 test3.txt
$ find . -name "*.txt"
./test2.txt
./test1.txt
./test3.txt
$ find -name "*.txt" -delete
$ ls
test1 test2 test3
-exec를 이용하여 삭제
-exec
옵션은 검색된 파일에 exec를 적용하여 어떤 명령어를 수행하는 옵션입니다.
-exec rm {} \;
를 입력하면 탐색된 파일에 대해서 삭제를 하도록 만들 수 있습니다.
(단순히 파일을 삭제하는 것이라면 -delete
옵션이 더 간단합니다.)
$ ls
test1 test1.txt test2 test2.txt test3 test3.txt
$ find . -name "*.txt"
./test2.txt
./test1.txt
./test3.txt
$ find -name "*.txt" -exec rm {} \;
$ ls
test1 test2 test3
Related Posts
- Ubuntu/Linux - 특정 이름이 들어간 파일 모두 찾고 삭제하기
- Ubuntu/Linux - 특정 이름이 포함된 프로세스 모두 종료
- Ubuntu/Linux - 사용자 계정 이름 확인 (id, whoami)
- Ubuntu/Linux - E: unable to locate package 에러 해결
- Ubuntu 22.04/20.04 - Yarn 설치 방법
- Linux/Ubuntu - grep 명령어로 문자열 검색
- Linux/Ubuntu - 터미널에서 seq로 명령어 N회 반복
- Linux/Ubuntu - wc 명령어로 Line(줄) 개수 세기
- bash: pip: command not found 문제 해결 (Linux/Ubuntu)
- Ubuntu 22.04 - Swap 메모리 늘리기
- Linux - 파일이 수정된 날짜/시간 확인 방법
- Linux - 파일, 디렉토리 삭제 명령어(rm -rf, rmdir)
- 우분투 22.04 - deb 파일 설치하기
- Ubuntu 20.04 - OpenJDK 11 설치, 삭제
- Linux - ps 명령어로 실행 중인 프로세스(PID) 확인
- Ubuntu 20.04 - SSH 설치와 접속 방법
- Ubuntu에서 PPA 저장소 추가, 제거 방법
- Ubuntu 22.04 - Brave 브라우저 설치
- Ubuntu 22.04 - 프로스트와이어(FrostWire) 설치
- Ubuntu 22.04 - Remmina 설치 방법
- Ubuntu 22.04 - Rust 설치하기
- Ubuntu 22.04 - 텔레그램 설치하기
- Ubuntu - Deluge 토렌트 클라이언트 설치
- Ubuntu JDK 17 (OpenJDK) 설치, 삭제
- Ubuntu 20.04 스팀(Steam) 설치 방법
- Ubuntu에서 draw.io 설치하는 방법
- 우분투에 VMware 설치하기
- [Ubuntu] VMware에서 Windows 11 설치
- Vi/Vim에서 1줄 또는 여러줄 삭제 방법
- Vi/Vim에서 라인 번호 표시하 기
- 우분투에서 rar 압축, 압축 풀기
- Ubuntu에서 구글 드라이브 사용하기 (로컬 폴더에 마운트)
- [Ubuntu] apt-cache search, 설치 가능한 패키지 검색
- Ubuntu - DNS 캐시 삭제 방법
- Ubuntu에서 사용할 수 있는 Text Editor 소개