http://kldp.org/node/19069

 

 

[팁]find 명령어의 유용한 옵션

다들 많이 쓰고 많이 아는 명령어 입니다.

주로 쓰는 옵션으로는

-name : 이름으로 찾을 때

-iname: name은 정확한 대소문자 구성을 알아야 되지만 iname은 대소문자 구분을 하지 않습니다.


-perm : 권한으로 찾을때
find . -perm 700 -print (권한이 700인 파일)


find . \ ( -perm 400 -o -perm 200 ) -print
파일 권한이 400인 파일과 200인 파일을 찾아준다.
(주의 : "\"의 앞뒤에 space 가 반드시 있어야 한다.)

-user , -group : 소유주나 그룹으로 찾을때
find . -user unix01 -print (파일 소유자가 unix01인 파일을 찾아준다. )

-empty : file의 크기가 0인 것을 찾기

-size : file의 크기 (block 수)로 찾기
find . -size +1024 -print (파일의 블럭 크기가 1024 이상인 파일을 찾아준다.)

-type c : 확장자가 c인 파일 찾기

-mount : 현재 파티션에서만 파일을 찾습니다. mount된 파티션에서는 검색하지 않죠. 전 데이타용 파티션을

크게 잡아서 따로 마운트해서 쓰고 있는데 보통 여기를 뒤질 필요는 없기 때문에 -mount 옵션으로 현재

파티션에서만 검색하곤 합니다.

-regex : 정규식도 사용할 수 있습니다. POSIX 정규식이겠죠?

-iregex: 대소문자 비구분 정규식으로 파일 찾기

-exec : 명령어 실행

find ./ -name \*.[cSh] -exec grep -H "찾고자하는문자열" {} \;

찾고자하는 문자열을 현제 디렉토리 부터 서브디렉토리까지 확장자가 c, S, h 인 파일에서 찾는 것입니다.

[cSh]가 정규식의 문자 클래스와 같은 역할을 하는 거죠. 소스화일로부터 원하는 문자열 찾을 때 유용합니다.

활용해 보세요. 끝에 리다이렉션( > 기호로 출력방향 전환) 붙여서 파일로 저장해도 좋고요.

만약 파일 이름은 한번만 나오게 하고 싶으면

find . -type f -name \*.[chS] -exec grep "찾을문자열" {} \; -print

하면 됩니다.

또, *.[chS]에서 *를 escape하지 않고(\* 하지 않고 그냥 *만 한다면), 현재 디렉토리에 c 파일들이

있으면, 셸에서 파일 이름 확장이 되버려서 원하는 결과를 얻을 수 없게 되죠.

시스템이 옮겨지면서 방대한 양의 파일들의 날짜가 모두 미래라서 컴파일이 안될 때가 있었습니다.

이걸 손수 다 읽었다 썼다를 하는데 힘이 들더군요. touch 명령 실행하기.

touch로 살짝 건드려 주기만 해도 날짜가 바뀐다는 것을 알아냈습니다.

다음에 find 의 -exec 옵션을 이용해서 모두 어루만져 주었습니다.

find ./ -exec touch {} \; -print


그 외의 옵션들

-amin N : N 분 이전 부터 access했던 file찾기

-atime N : N 시간 이전부터 access했던 file찾기
find . -atime +30 -print (30일 이전에 억세스되었던 파일을 찾는다.)

-ctime N : N 시간 이전에 상태가 변경된 파일 찾기

-mtime N : N 시간 이전에 내용이 변경된 파일 찾기
find . -mtime -7 -print (7일 이내에 수정된 적이 있는 파일을 찾는다.)
위에 있는 시간관련 옵션들은 보안상 위험한 백도어 같은 파일을 찾을때 유용하게 쓸 수

있습니다. 관리자가 자리를 비우거나 휴가를 간 사이에 접근해서 내용이나 상태를 변경시킨

게 있다면 누군가 침입을 해서 건드린 것 일 확률이 높으니 이것들을 찾는 용도로 많이

쓰입니다.

유닉스 시스템에서 어떤 큰 화일이 시스템을 소비하는지 알고 싶을 때, 즉

파일 크기 순서대로 Sorting하는 것.

find /var -mount -ls -xdev | /usr/bin/sort -nr +6 | more

매주 일요일 새벽 2시에 access한 날짜가 2일 이상인 파일을 /tmp 에서 지우려면

0 2 * * 0 find /tmp -atime +2 -exec rm {} ;


find 명령 외에 파일 검색에 쓰이는 명령어로는

whereis : 명령어, 원본소스,메뉴얼 파일을 찾을때

which : shell과 명령어의 위치를 찾을때 (PATH가 걸려 있는 범위내 에서만)


profile

이브리타, 나의 에뜨와르
너와 내가 공유하는 추억
너와 내가 만들 추억