본문 바로가기
개발/linux

bash 기초 - 파일 찾기 find

by 가시죠 2021. 1. 18.
반응형

find

이름으로 특정 파일을 찾는 기능으로 찾으려는 전체 파일명이나 일부 이름을 알고 있을 경우 유용하게 찾을 수 있다.

 

/home 디렉토리와 그 하위 디렉토리들에서 이름에 log 라는 단어가 들어있는 파일을 찾는다.

$find /home -name '*log*'

 

대소문자 구문없이 찾고 싶을 경우 -iname 옵션을 사용한다.

$find /home -iname '*log*'

 

find 실행 시 Permission Denied 같은 오류가 나올때가 있는데 (전체 디렉터리로 찾을 경우 등) 오류 메시지는 표시되지 않게 하고 싶을 경우 오류를 /dev/null로 보내버리는 방법을 사용하면 유용하다.

$find / -name '*issue*' 2>/dev/null

 

전체 시스템에서 숨겨진 파일만 찾아보고 싶을경우 (오류 메시지는 무시)

$find / -name '.*' 2>/dev/null

 

파일 크기로 찾기 (/home폴더 포함 아래 폴더에 5기가 이상인 파일)

find /home -size +5G

 

-exec 명령 '{}' \; (바로 앞 명령의 결과가 {}에 담긴다.)

$ find . -name '*.txt' -exec cat '{}' \;
  • find로 현재 폴더에서 txt파일을 모두 찾는다. 만약 찾은 파일이 a.txt, b.txt가 있다면, 찾은 결과가 {}에 들어가므로 결론적으로 cat a.txt, cat b.txt가 실행된다.

  • -exec는 뒤에 계속 붙여서 사용할 수 있다.

 

전체 시스템에서 용량이 가장 큰 파일 찾기

find / -type f -exec ls -s '{}' \; | sort -n -r | head -5
  • / -type f : 전체폴더 에서 파일

  • -exec ls -s : 각 파일의 경로를 대상으로 ls -s를 실행 (ls -s : 블록단위로 조회)

  • sort -n -r : 역순으로 정렬

  • head -5 : 상위 5개의 출력

 

파일 시간으로 찾기 (5분 이내 수정된 파일)

$ find /home -mmin -5

파일 시간으로 찾기 (24시간 이내 수정된 파일)

$find /home -mtime -1

 

수정된지 48시간이 넘은 파일 찾기

$find /home -mtime +2

 

24시간 이내에 접근(access) 된 파일 찾기

$find /home -atime -1

 

/home 디렉토리 포함 아래에 24시간 이내에 접근된 파일들을 현재 디렉토리로 복사

$file /home -type f -atime -1 exec cp '{}' ./ \;

 

파일 내용으로 찾기 (/home 포함 하위 디렉토리에서 password라는 문자열이 담긴 파일 찾기)

$grep -i -r /home -e 'password'

 

  • -r : /home 하위 디렉토리를 재귀적으로 검색하라는 의미

  • -i : 대소문자 구분 없이 

  • -e : 정규 표현식

 

특정 패턴의 파일을 현재 디렉토리로 복사

$find /home -type f -exec grep 'password' '{}' \; -exec cp '{}' . \;

 

파일형식으로 찾기

$find / -type f -exec file '{}' \; | egrep 'PNG' | cut -d' ' -f1
  • find로 찾은 각 항목을 file로 보내서 파일형식을 출력한다. 출력된 파일형식은 egrep에 따라 PNG가 있는 것만 필터링 되고 cut로 필요한 부분만 추출해서 표시된다.

 

반응형

댓글