find
find [OPTION...] [PATH] [EXPRESSION...]
OPTION
-P : 심볼릭 링크를 따라가지 않고, 심볼릭 링크 자체 정보 사용.
-L : 심볼릭 링크에 연결된 파일 정보 사용.
-H : 심볼릭 링크를 따라가지 않으나, Command Line Argument를 처리할 땐 예외.
-D : 디버그 메시지 출력.
EXPRESSION
-name : 지정된 문자열 패턴에 해당하는 파일 검색.
-empty : 빈 디렉토리 또는 크기가 0인 파일 검색.
-delete : 검색된 파일 또는 디렉토리 삭제.
-exec : 검색된 파일에 대해 지정된 명령 실행.
-path : 지정된 문자열 패턴에 해당하는 경로에서 검색.
-print : 검색 결과를 출력. 검색 항목은 newline으로 구분. (기본 값)
-print0 : 검색 결과를 출력. 검색 항목은 null로 구분.
-size +1K : 파일 크기를 사용하여 파일 검색. (1K 이상, -1K 면 1K 이하)
-type : 지정된 파일 타입에 해당하는 파일 검색.
-mindepth N : 검색을 시작할 하위 디렉토리 최소 깊이 지정.
-maxdepth N : 검색할 하위 디렉토리의 최대 깊이 지정.
-atime ±N : 파일 접근(access) 시각을 기준으로 파일 검색. (일 단위)
-amin ±N : 파일 접근(access) 시각을 기준으로 파일 검색. (분 단위)
-ctime ±N : 파일 내용 및 속성 변경(change) 시각을 기준으로 파일 검색. (일 단위)
-cmin ±N : 파일 내용 및 속성 변경(change) 시각을 기준으로 파일 검색. (분 단위)
-mtime ±N : 파일의 데이터 수정(modify) 시각을 기준으로 파일 검색. (일 단위)
-mmin ±N : 파일의 데이터 수정(modify) 시각을 기준으로 파일 검색. (분 단위)
- find는 pattern matching을 사용 하는데, 은근 regex와 헷갈리니 아래의 링크를 잘 참고하자.
선택 위치 이하 검색어 지정
$ find <PATH> -name "NAME*"
$ find <PATH> -name "NAME*"
$ find ./python_shell -name "heapq"
<PATH>
에 정규식 사용 시, "<PATH>"
처리말 것
SRC_PATH="/home/myhome/*/*/helloworld"
SRC_LIST=$(find "${SRC_PATH}" -maxdepth 0 -type d)
SRC_LIST=$(find ${SRC_PATH} -maxdepth 0 -type d)
제외할 경로 지정
$ find <PATH> -not -path "EXCLUDE PATH*"
$ find <PATH> -not -path "EXCLUDE PATH*"
$ find ./ -not -path "./build/*" -name "<NAME>"
 ̄ <-- ./build 인 것을 유의!
$ find ./python_shell -not -path "./python_shell/.git*" -type d
./python_shell
./python_shell/algorithm
./python_shell/heapq
./python_shell/exercise
./python_shell/traverse
./python_shell/shell
depth 정하기
$ find <PATH> -maxdepth 1
sstate-cache
$ find ./sstate-cache -maxdepth 0
-> 출력: ./sstate-cache
type 지정
-type [TYPE]
으로 type 지정 검색 가능
TYPE | 설명 |
---|
b | block special |
c | character special |
d | direcotry |
f | regular file |
l | symbolic link |
p | FIFO |
s | socket |
$ find . -name "build*" -type f
$ find . -name "build*" -type d
exec 활용
$ find <PATH> -exec echo {} \;
- { }에는
find
로 찾은 결과물이 들어감
- \;에는 명령어 실행
- 찾을 때 마다 하나하나 들어가는게 아닌, find로 찾은 결과물이 '끝나야' 비로소 실행됨
$ find <PATH> -exec rm -r {} \;
$ find ./sstate-cache -name "sstate*" -exec rm {} \;
- { }에는
find
로 찾은 결과물이 들어감
- \;에는 명령어 실행
- 찾을 때 마다 하나하나 들어가는게 아닌, find로 찾은 결과물이 '끝나야' 비로소 실행됨
- 결국
-delete
옵션을 주는 것과 똑같음
$ find -exec diskus {} \;
갯수
$ find . -type f | wc -l
날짜 / 분
Access 3일 이상 지난 것
$ find -atime +3
Create 30분 이하
$ find -cmin -30
size
$ find -size +1K
$ find -size -1K
print0 | xargs -0
- 공백 문자는 매우 민감하다.
-print0
옵션으로 매 찾은 파일 마지막에 \0문자를 추가 시켜 넘기자.
xargs
에서는 -0
혹은 --null
옵션을 줘 하나의 파일이 \0
문자 만날 때까지 하나로 인식케한다.
return code
$ find [대상] -name "name*"
- [대상]이 없을 경우:
1
- [대상]에서
-name "name*"
이 없을 경우: 0
현재 위치 하위의 디렉토리별 파일 수 카운트
find . -xdev -type d -exec /bin/echo -n "{}: " \; -exec sh -c "ls {} | wc -l" \;
-xdev
: 로컬 파일 시스템에서만 검사한다.