파일을 찾을 때 find 명령어와 xargs 명령어를 파이프(|)로 묶어서 여러가지 기능을 사용을 했었는데 find 명령어에 대해서 자세히 찾아보니 다른 블로그에서 쉽게 보지 못했던 기능들이 있어서 정리를 해둔다.
find 는 기본적으로 다음의 방법으로 사용을 한다.
// 문법
$ find path operators
// 현재 디렉토리(하위포함 이후 표현 동일함)에서 이름이 *.c 에 해당하는 결과
$ find . -name *.c
// 루트(/) 디렉토리에서 최근 3일 이내에 수정된 자료의 결과
$ find / -mtime -3
// 사이즈가 512byte 보다 큰 결과
$ find . -size +512
// .o 로 끝나는 파일을 찾아서 모두 삭제
$ find . -name "*.o" -exec rm -rf {} \;
// [주의] !, \(, \), {} 를 비롯한 모든 연산자의 앞뒤에는 반드시 공백이 있어야 한다.
// 아래의 명령은 정상적으로 실행되지 않는다.
$ find . \!\(-atime +5 \(-name "*.o" -o -name "*.tmp"\)\)
// 현재 디렉토리에서 일반파일 유형만 검색
// b(블록특수파일), c(문자특수파일), d(디렉토리), f(일반파일), l(심볼릭링크), p(이름있는 파이프파일), s(소켓)
$ find . -type f
AND/OR/NOT 연산에 대해서 다음과 같이 사용이 가능하다.
operator1 -a operator2 // AND 연산
operator1 -o operator2 // OR 연산
! operator // NOT 연산
\(expression\) // 논리 우선순위 지정
// 파일이름이 *.o 또는(OR) *.tmp 와 일치하는 결과
$ find . -name "*.0" -o -name "*.tmp"
// 접근한지 5일이 넘었고 파일이름이 *.o 또는 *.tmp 와 일치하는 결과
$ find . -atime +5 \( -name "*.o" -o -name "*.tmp" \)
// [주의] 두 연산자 사이에 -o 가 없으면 AND로 간주 (아래의 두 명령은 같은의미)
$ find . -atime +5 -name "*.o" -o -name "*.tmp"
$ find . \( -atime +5 -name "*.o" \) -o -name "*.tmp"
// [공백주의](접근한지 5일이 넘었고 파일이름이 *.o 또는 *.tmp) 와 일치하지 않는 결과
$ find . \! \( -atime +5 \( -name "*.o" -o -name "*.tmp" \) \)
특정 디렉토리를 제외하고 검색하기
1004lucifer:rabbit huhwook$ find .
.
./.DS_Store
./log
./log/nohup.out_bak
./sp
./sp/20150211.log
./sp/20150212.log
./sp/20150213.log
./sp/20150214.log
./sp/20150214_notNull.log
./sp/20150215.log
./sp/20150216.log
./sp/20150217.log
1004lucifer:rabbit huhwook$
// sp 단어의 디렉토리를 제외하고 찾기
1004lucifer:rabbit huhwook$ find . \! \( -type d -name sp -prune \)
.
./.DS_Store
./log
./log/nohup.out_bak
1004lucifer:rabbit huhwook$
// ./sp 경로의 디렉토리를 제외하고 찾기
1004lucifer:rabbit huhwook$ find . \! \( -type d -path ./sp -prune \)
.
./.DS_Store
./log
./log/nohup.out_bak
1004lucifer:rabbit huhwook$
1004lucifer:rabbit huhwook$
// ./sp 와 ./log 경로의 디렉토리를 제외하고 찾기
1004lucifer:rabbit huhwook$ find . \! \( \( -type d -path ./sp -o -type d -path ./log \) -prune \)
.
./.DS_Store
1004lucifer:rabbit huhwook$
검색 디렉토리 최대 레벨 제한 걸기
total 2483808
-rwxrwxrwx 1 huhwook staff 1271705839 2 26 18:03 20150226_RabbitMQ_Access_Log.zip
drwxr-xr-x 5 huhwook staff 170 2 26 18:24 rabbit
drwxr-xr-x 5 huhwook staff 170 2 26 18:36 tomcat
1004lucifer:rabbit huhwook$
1004lucifer:rabbit huhwook$ find . -maxdepth 1
.
./.DS_Store
./20150226_RabbitMQ_Access_Log.zip
./rabbit
./tomcat
1004lucifer:rabbit huhwook$
특정 단어가 들어있는 파일을 찾는 방법
// 현재디렉토리의 일반파일에서 $12.99 라는 문자열이 있는 파일을 검색
$ find . -type f | xargs grep "$12.99"
참고서적
유닉스 파워 툴 - 셸리 파워즈 지음, 서환수 옮김/한빛미디어 |
댓글
댓글 쓰기