이번 포스트에서는 find 명령어로 파일을 검색하는 방법을 정리하겠습니다.
find 명령어
find
명령어를 이용하면 파일 혹은 디렉토리를 검색할 수 있습니다.
$ find [옵션(options)] [경로(path)] [표현식(expression)]
find 명령어의 옵션(options)
-P
-> Symbolic link일 경우 따라가지 않습니다. default 설정입니다.
-L
-> Symbolic link를 따라가지 않습니다.
-H
-> command line argumnets(명령줄 인수)를 처리할때를 제외하고 Symbolic link를 따라가지 않습니다.
find 명령어의 표현식(expressions)
Test Expressions
Test Expressions는 특정 조건에 맞는 파일들은 선별하기 위해서 사용하며 사용하는 표현식이며 옵션들은 아래와 같습니다.
-atime n
-> 파일이 마지막으로 액세스 된 시간을 기준으로 검색합니다. n시간(hour) 이내에 파일에 액세스 된 시간을 의미합니다.
-amin n
-> 파일이 마지막으로 액세스 된 시간을 기준으로 검색합니다. n분(minute) 이내에 파일에 액세스 된 시간을 의미합니다.
-ctime n
-> 파일이 마지막으로 변경 된 시간을 기준으로 검색합니다. n시간(hour) 이내에 파일이 변경 된 시간을 의미합니다.
-cmin n
-> 파일이 마지막으로 변경 된 시간을 기준으로 검색합니다. n분(minute) 이내에 파일이 변경 된 시간을 의미합니다.
-empty
-> 내용이 비어있는 빈 파일이거나 빈 디렉토리를 검색합니다.
-perm mode
-> 파일의 권한 8진수로 검색합니다.
-type c
-> 파일의 타입으로 검색하며 타입의 종류는 아래와 같습니다.
b: 블록파일
c: 문자
d: 디렉토리
p: 파이프 (FIFO)
f: 파일
l: 심볼릭 링크
s: 소켓
-size [+, -]n
-> 파일의 사이즈로 검색합니다. +는 n크기 이상의 파일, -는 n크기 이하의 파일을 의미하며 n에 들어가는 사이즈 옵션은 아래와 같습니다.
b: for 512 bytes block
c: for byte
w: for two-byte words
k: for Kilobytes (units of 1024 bytes)
M: for Megabytes (units of 1048576 bytes)
G: for Gigabytes (units of 1073741824 bytes)
Actions Expressions
Actions Expressions는 찾은 파일에 대해서 액션을 수행합니다. default로는 -print가 수행되며 옵션들은 아래와 같습니다.
-delete
-> 파일을 삭제합니다.
-exec command {} \;
-> 검색한 파일에 대해서 지정된 command의 명령을 수행합니다. {} 안에 검색된 파일이 들어갑니다.
-print
-> 파일이름을 regex 패턴으로 검색합니다.
find 명령어 예시
파일 이름(-name)으로 검색하기
* 와일드카드 이용하기
* 와일드카드
는 글자수에 상관없이 모든 글자 라는 의미를 가지고 있습니다.
# 현재 디렉토리에서 a로 시작하는 모든 파일을 검색.
$ find . -name 'a*'
# 현재 디렉토리에서 b로 끝나는 모든 파일을 검색.
$ find . -name '*b'
# 현재 디렉토리에서 a로 시작하고 b로 끝나는 모든 파일을 검색.
$ find . -name 'a*b'
# 현재 디렉토리에서 .txt로 끝나는 모든 파일을 검색.
$ find . -name '*.txt'
# 현재 디렉토리에서 jpg, jpeg 등등 jp가 들어간 이미지 확장자 파일들을 검색.
$ find . -name '*.jp*'
? 와일드카드 이용하기
? 와일드카드
는 모든 한글자 라는 의미를 가지고 있습니다.
# 현재 디렉토리에서 중간에 a가 들어간 5글자의 파일을 검색.
$ find . -name '??a??'
# 현재 디렉토리에서 ab로 시작하는 3글자 파일을 검색. ex) abc, abd, abe ...
$ find . -name 'ab?'
# 현재 디렉토리에서 abc.으로 시작하고 3가지 글자로 끝나는 파일을 검색. ex) abc.jpg, abc.txt, abc.png .....
$ find . -name 'abc.???'
[] 와일드카드 이용하기
[] 와일드카드
는 []안에 들어있는 각각의 모든 한글자를 의미합니다.
# a b c . , 중에 한 글자의 파일을 검색.
$ find . -name '[abc.,]'
# acd ace bcd bce 에 포함되는 파일을 검색. 즉, [ab]의 의미는 a, b중에 한 글자를 의미하는 것입니다.
$ find . -name '[ab]c[de]'
# ab, bb, cb, db, eb, fb ... 에 포함되는 파일을 검색.
$ find . -name '[*]b'
파일 size(-size)로 검색하기
# 현재 디렉토리에서 크기가 1024byte인 파일 검색.
$ find . -size 1024c
# 현재 디렉토리에서 1024byte보다 크기가 큰 파일 검색.
$ find . -size +1024c
# 현재 디렉토리에서 1024byte보다 크기가 작은 파일 검색.
$ find . -size -1024c
# 현재 디렉토리에서 1MB보다 크고 512MB보다 작은 파일 검색.
$ find . -size +1M -size -512M
# 현재 디렉토리에서 빈 디렉토리 혹은 파일 크기가 0인 파일을 검색.
$ find . -empty
# 현재 디렉토리에서 빈 디렉토리이거나 크기가 0인 파일 검색하여 삭제.
$ find . -name '*' -empty -delete
검색한 파일에 대해서 추가 명령어(-exec) 실행하기
# 현재 디렉토리에 _images로 끝나는 모든 파일을 찾아서 상세정보 출력
$ find . -name '*_images' -exec ls -l {} \;
# 현재 디렉토리에 있는 파일 중에 파일 내용에 abcd라는 내용이 들어가있는 파일들 찾기
$ find . -type f -exec grep 'abcd' {} \;
# 현재 디렉토리에 있는 .apk로 끝나는 파일 모두 삭제
$ find . -name '*.apk' -exec rm -f {} \;