사용자 도구

사이트 도구


linux:find

문서의 이전 판입니다!


find

정규표현식 regex

  • 정규표현식으로 파일을 찾을 때는, 파일 이름뿐 아니라 파일 앞의 디렉토리 명까지 고려해서 정규표현식을 작성해야 한다.
    # 파일 이름이 숫자.txt 인 것들
    find . -regex ".*/[0-9]+.txt"

특정 시점 이후/이전 수정된 파일

  • -mtime, -atime, -ctime 등을 사용하면 접근/생성/변경 등의 날짜를 기준으로 파일을 찾을 수 있다.
    # 30일 보다 이전에 수정된 파일들
    find . -mtime +30
     
    # 딱 30일 전에 수정된 파일
    find . -mtime 30
     
    # 시간 비교시 해당 일의 시작 시간(00:00) 부터
    find . -mtime 30 -daystart
     
    # 30일 전 이후(오늘 부터 30일 전까지 사이)에 수정된 파일
    fine . -mtime -30

depth

  • -maxdepth 1 : 최대 디렉토리 한 단계만
  • -mindepth 1 : 명령행 지정된 경로(한 단계)를 제외하고 찾기

type

  • -type d : 디렉토리
  • -type f : 일반 파일
  • -type l : 심볼릭 링크
  • -type s : socket

파일 이름만 가져오기

shell - How to get file only file name with linux `find`? - Stack Overflow

find ./dir1 -type f -exec basename {} \;
find /dir1 -type f -printf "%f\n"

-ignore_readdir_race/-noignore_readdir_race

  • find 명령이 파일 이름을 읽는 순간과 해당 파일의 상태 정보를 읽는 순간의 그 사이에 파일이 삭제될 경우 오류 메시지가 출력 된다. 보통은 No such file or directory
  • -ignore_readdir_race 옵션을 주면 파일이 사라진 상황에 대한 에러 메시지를 안내고 그냥 무시한다.

동일 이름 파일 목록 얻기

find . -type f -printf "%f\n" | sort | uniq -c | grep -v ' 1 '

하위 디렉토리에 존재하는 파일 갯수

find */ | cut -d/ -f1 | uniq -c

현재 시점부터 특정 날짜 이상 전의 모든 로그 파일들 중에서 grep

로그 파일이 한 날짜에 굉장히 많을 때(Jenkins build log) 특정 날짜의 로그 파일만 찾아서 거기서 특정 문자열 검색

find . -name *.log -mtime [날짜수] -daystart -exec grep '검색어' {} \;
linux/find.1470640863.txt.gz · 마지막으로 수정됨: 2016/08/08 15:51 저자 kwon37xi