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로 필요한 부분만 추출해서 표시된다.
'개발 > linux' 카테고리의 다른 글
bash 기초 - join (0) | 2021.01.18 |
---|---|
bash기초 - awk (0) | 2021.01.18 |
bash 기초 - 리눅스 로그 파일 및 시스템 정보 (0) | 2021.01.18 |
bash 기초 - ssh를 이용한 원격 명령 실행 (0) | 2021.01.18 |
무료 접속 유닉스(리눅스) 시스템 (0) | 2021.01.18 |
댓글