2swan
Linux find 명령어(2) 본문
파일/디렉터리 검색
$ find [경로] [옵션] [표현식]
$ find [PATH] [OPTION] [EXPRESSION]
find 표현식(expression)
-name | 주어진 이름의 파일이나 디렉터리를 찾는다 $ find -name '*.txt' 현재 디렉터리 이하의 모든 디렉터리에서 .txt로 끝나는 파일 및 디렉터리를 찾는다. |
-user | 지정한 사용자의 파일이나 디렉터리를 찾는다. |
-group | 지정한 그룹 소유의 파일이나 디렉터리를 찾는다. |
-uid | 지정한 UID 소유의 파일이나 디렉터리를 찾는다.(아이디 번호로 찾기) |
-gid | 지정한 UID 소유의 파일이나 디렉터리를 찾는다.(그룹번호로 찾기) |
-perm | 지정한 허가권 값을 갖는 파일이나 디렉터리를 찾는다.(permission의 약자) ex) -perm 800 : 퍼미션 값이 800로 설정된 파일이나 디렉터리 |
-atime n | n : n일 이전에 접근한 파일 찾기 (exactly) +n : n보다 오래된 녀석들 기준 (greater) -n : n일부터 지금까지 n일 내에 접근했던 파일들을 불러준다 (less) |
-ctime n | change time 수정 시간 기준으로 찾는다 |
-mtime n | modify time 변경 시간 기준으로 찾는다 |
-empty | 빈 파일(파일의 크기가 0일 경우)이나 빈디렉터리일 경우 출력 |
-inum n | node번호가 n인 파일 찾 |
* find 명령에서 두 개 이상의 표현식을 사용할 때 연산자를 지정하지 않으면, 기본적으로 -a (AND)가 적용된다.
# 같은 명령어
find -empty -print
find -empty -a print
파일명으로 찾기 (-name)
$ find
현재 디렉터리의 파일 및 디렉토리 출력
$ find -print
현재 디렉터리의 모든 내용을 줄 바꿈 없이 출력
$ find . empty
현재 경로 하위에서 빈 디렉터리 혹은 크기가 0인 파일 검색
$ find [PATH]
PATH에 있는 파일 및 디렉터리 리스트 표시
$ find . -name [FILENAME]
현재 디렉터리 아래 모든 파일 및 디렉터리 검색.
$ find . -iname [FILENAME]
name앞에 i를 붙여주게 되면 대소문자 구분없이 검색.
$ find ~ -name [FILENAME]
사용자의 홈디렉터리 하위에서 파일이름 검색
$ find . -name 'STR*'
지정된 문자열로 시작하는 파일 검색
$ find . -name '*STR * '
지정된 문자열이 포함된 파일 검색
$ find . -name ' * STR'
지정된 문자열로 끝나는 파일 검색
$ find . -name 'B*'
B로 시작하는 파일 검색
$ find /user -name '*.txt'
/user 디렉터리에서 txt 파일이름으로 끝나는 파일이름 검색
$ find . -name '*.EXT' -delete
확장자 검색 후 파일 삭제
타입으로 찾기 (-type)
$ find . -name [NAME] -type f,d,l
현재 경로 하위 파일/디렉터리/심볼릭링크에서 [NAME]을 검색
※ -type 종류
b : block special
c : character special
d : directory
f : regular file
l : symbolic link
p : FIFO
s : socket
$ find . -name dog -type f
dog라는 이름의 일반 파일 검색.
$ find . -name ABCD -type d
ABCD 라는 이름의 디렉터리만 검색
파일 크기로 찾기 (-empty, -size)
$ find . -size +[SIZE1]c -size -[SIZE2]c
현재 경로 하위에서 파일 사이즈로 검색
$ find . -size 1024c
파일 크기가 1024 바이트인 파일 검색.
$ find . -size +1024c
파일 크기가 1024 바이트를 초과하는 파일 검색
$ find . -size -1024c
파일 크기가 1024 바이트 미만인 파일 검색
$ find . -size +1024c -size -2048
파일 크기가 1024 바이트 초과 2048 바이트 미만인 파일 검색
$ find . -type d -size +100
. 현재 디렉터리에서 타입이 d(디렉터리)인 파일들 중에 사이즈가 100이상인걸 검색
검색 결과 나열하는 방법 (-print / -print0)
일반적으로 print가 기본 옵션이고 별도로 지정해주지 않으면 -print가 들어간다.
-print0을 사용하면 각 결과는 null 문자(\0)로 끝나며 파일이나 디렉터리 이름에 newline이나 공백이 들어가 있는 경우에도 정확하게 처리할 수 있
$ find ./ -name "*.bak" -print
$ find ./ -name "*.bak" -print0
검색된 파일에서 추가 명령 실행 (-exec)
{} : find 에서 찾아낸 검색 결과가 하나씩 들어가는 부분
\; : -exec 다음부분에 나와있는 명령어를 실행하라는 부분
$ find . -name "*.c" -exec ls -l {} \;
현재 디렉터리에서 c 확장자 파일 상세 정보 출력 (ls 명령)
$ find . -name "*.c" -exec grep "main" {} \;
.c 파일에 문자열 main이 있는지 검색 (grep 명령)
$ find . -name "*.java" -exec grep -n "class" {} \;
.java 파일에 문자열 class가 있는 라인 표시.
$ find . -name "*.tar.gz" -exec cp {} /mnt/usb/ \;
검색된 파일을 특정 [경로]로 복사 (cp 명령 실행) > tar.gz 파일을 /mnt/usb/ 에 복사
$ find . -name "*.c" > source-list.txt
모든 c 파일 검색 결과를 source-list.txt에 저장 (입출력 재지정 redirection ">" 실행)
$ find / -name "*.c" 2> /dev/null
에러 메시지를 표시하지 않음
$ find . -name [NAME] -exec tar -xcvf [파일명] {} \;
검색된 파일로 압축파일 생성 (tar 명령 실행)
$ find test -perm 664 -exec rm {} \;
test 디렉터리에서 권한이 rw-rw-r-- 인 파일을 find해서 (rm 명령 수행)
* 구분자 + 와 \; 차이
-exec 옵션의 제일 끝에 구분자는 +와 \; 두 가지로 나뉘어져 있으며 성능 면에서 + 가 좋다고 알려져 있다.
\; 를 마지막 구분자로 사용하면 각 파일에 대해 별도의 프로세스를 실행하게 되는데 이로 인해, RPM과 처리 시간 모두에서 심각한 패널티가 발생할 수 있기 때문이다.
구분자 더하기 기호 + 사용하면 모든 표현식의 결과가 연결되어 전체적으로 한 번만 실행되는 -exec 명령에 전달된다.
$ find -name '파일명*' -exec tar -cvfz 파일명.tar.gz {} \;
$ find -name '파일명*' -exec tar -cvfz 파일명.tar.gz {} +
특정 파일 권한을 가진 파일을 검색(-perm)
$ find . -perm 0664
현재 경로에서 특정권한의 파일/디렉터리 검색
$ find test -perm 664 -exec rm {} \;
test 디렉터리에서 권한이 rw-rw-r-- 인 파일을 find해서 rm 명령 수행
정규표현식 패턴으로 파일명 검색 (-regex)
$ find . -regex ".*/[0-9]+.txt"
파일 이름이 숫자.txt 인 것들
특정 시간 이후/이전 수정된 파일(-mtime, -atime, -ctime)
# 현재 12월 12일 이라고 가정
$ find -mtime -3
3일(72시간)보다 새로움 => 12.9 ~
$ find -mtime 3
4일(96시간) 전에서 3일(72시간)전까지 => 12.8 ~ 12.9
$ find -mtime +3
4일(96시간)전보다 과거 => 12.8
하위 디렉터리 무시 (-prune)
$ find . -name "*.문자*" -prune
서브 디렉터리 내용 제한 검색 (-depth)
-maxdepth 1 : 최대 디렉터리 한 단계만
-mindepth 1 : 명령행 지정된 경로(한 단계)를 제외하고 찾기
$ find . -maxdepth 1 -name [NAME]
현재 경로에서만 [NAME] 검색 (하위 디렉터리 미포함)
'System of Infra > Linux' 카테고리의 다른 글
Error while powering on: Virtualized performance counters require at least one available functioning counter.Module 'VPMC' power on failed.Failed to start the virtual machine. (0) | 2024.05.02 |
---|---|
Linux 32비트 64비트 확인방법 (0) | 2024.04.30 |
Linux 파일 명령어(1) (0) | 2024.04.26 |
Linux 디렉토리 명령어 (1) | 2024.04.26 |
Linux Port (1) | 2024.04.26 |