find 명령

markyang92·2021년 4월 25일
0

linux (ubuntu/debian)

목록 보기
26/37
post-thumbnail

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 <PATH> -name "NAME*"

$ find <PATH> -name "NAME*"

# ./python_shell 이라는 디렉토리에서 "heapq" 라는 파일 | 디렉토리 검색
$ 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*"

# ./build 이하 경로 제외
$ find ./ -not -path "./build/*" -name "<NAME>"<-- ./build 인 것을 유의!

# ./python_shell 이라는 디렉토리에서 ".git*" 이라는 파일 | 디렉토리 제외
# 디렉토리만 검색
$ 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

  • 찾는 최대 깊이1단계 까지만한다.
sstate-cache # 디렉토리
$ find ./sstate-cache -maxdepth 0
-> 출력: ./sstate-cache

type 지정

  • -type [TYPE]으로 type 지정 검색 가능
TYPE설명
bblock special
ccharacter special
ddirecotry
fregular file
lsymbolic link
pFIFO
ssocket
$ find . -name "build*" -type f	# 현재 + 하위 'build*' 이름 '파일'
$ find . -name "build*" -type d # 현재 + 하위 'build*' 이름 '디렉토리'

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 {} \;

  • 심지어 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: 로컬 파일 시스템에서만 검사한다.
profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글