새소식

서버관련/Command

FIND 명령어

  • -
SMALL

find - 파일찾기


find 명령어는 파일 시스템에서 주어진 조건으로 파일을 찾는다.

사용법을 살펴보자.


find 대상디렉토리 검색 조건 처리 방법

대상 디렉토리 : 찾기를 시작할 디렉토리를 지정한다. 
검색 조건 : 찾을 조건을 지정한다. 
-name filename 
파일 이름으로 찾는다. 
-atime +n 
access time 이 n일 이전인 파일을 찾는다. 
-atime -n 
access time이 n일 이내인 파일을 찾는다. 
-mtime +n 
n일 이전에 변경된 파일을 찾는다. 
-mtime -n 
n일 이내에 변경된 파일을 찾는다. 
-perm nnn 
파일 권한이 nnn인 파일을 찾는다. 
-type x 
파일 타입이 x인 파일들을 찾는다. 
-size n 
사이즈가 n이상인 파일들을 찾는다. 
-links n 
링크된 개수가 n인 파일들을 찾는다. 
-user username 
user이름으로 찾는다. 
-group groupname 
group 이름으로 찾는다.

처리방법 : 찾은 파일을 어떻게 할 것인지를 지정한다. 
-print 
찾은 파일의 절대 경로명을 화면에 출력한다. 
-exec cmd {};  
찾은 파일들에 대해 cmd 명령어를 실행한다.


예를 들어보자. 
$ find /user4 -name test* -print

/user4 아래에서 파일이름이 test로 시작하는 모든 파일을 찾아서 화면에 
보여준다.

$ cd / 
$ find . -name ping -print

root 디렉토리 밑에서 파일이름이 ping인 파일을 찾아 절대 경로명을 화면에 
출력한다.

$ cd / 
$ find /usr -name *.c -print

/usr 밑에 이름이 .c로 끝나는 모든 파일들을 찾아 경로명을 보여준다.

$ cd / 
$ find $home -name who.txt -print

home 디렉토리 아래에 who.txt라는 파일을 찾아 경로명을 보여준다.

$ cd / 
$ find . -type d -print

파일 타입이 d인 파일을 찾아 경로명을 화면에 출력한다.

$ cd / 
$ find /dev -type c -print

/dev디렉토리 아래에서 파일 타입이 c인 파일을 찾아 경로명을 보여 준다.

$ cd / 
$ find . -perm 700 -print

파일 권한이 700인 파일을 찾아준다.

$ cd / 
$ find . \ ( -perm 400 -o -perm 200 ) -print

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

$ cd / 
$ find . -size +1024 -print

파일의 블럭 크기가 1024 이상인 파일을 찾아준다.

$ cd / 
$ find . -name core -size +2048 -print

파일 이름이 core이고 크기가 2048블럭 이상인 파일을 찾아준다.

$ cd / 
$ find . -user unix01 -print

파일 소유자가 unix01인 파일을 찾아준다.

$ cd / 
$ find . -group unix -print

사용자그룹이 unix인 파일을 찾아준다.

$ cd / 
$ find . -atime +30 -print

30일 이전에 억세스되었던 파일을 찾는다.

$ cd / 
$ find . -mtime -7 -print

7일 이내에 수정된 적이 있는 파일을 찾는다.

$ cd / 
$ find . -name core -exec ls -l {} \;

이름이 core인 파일을 찾아서 ls -l 한다.

$ cd / 
$ find . -name \*.c -atime +30 -exec ls -l {} \;

30일 이전에 억세스된 파일 중 *.c를 찾아 ls -l 한다.

$ cd / 
$ find . -name core -exec rm -i {} \;

현재 디렉토리 밑에서 이름이 core인 파일을 찾아 지운다(지우기 전에 정말 
지울 지를 물어본다.)

find ./ -size +100 -exec ls -al {} ;

find /var/spool/mail -atime +5 -exec rm {} ;

아래는 특정한 문자열을 검색하여 파일명을 출력하여 줍니다. 
find . -type f -exec grep "string" /dev/null {} ;

주의할 것은 조건에 맞는 파일의 개수가 많은 경위 쉘의 명령행 버퍼의 범위를 벗어나므로 문제가 생길수 있다는 것입니다.

명령행 버퍼의 오버플로우를 방지하기 위해서 다음과 같이 하십시요.

find . -type f | xargs grep "string"


여기서 string는 검색 문자열입니다. 

-----------------------------------------------------------

유닉스 시스템에서 어떤 큰 화일이 시스템을 소비하는지 
알고 싶으세요? 
그렇다면 아래와 같이 입력해보세요.

큰 화일이 sort되어서 나온답니다.

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


또 다른 예로 매주 일요일 새벽 2시에 access한 날짜가 2일 이상인 파일을
/tmp 에서 지우려면
0 2 * * 0 find /tmp -atime +2 -exec rm {} ;

이 글은 스프링노트에서 작성되었습니다.

LIST

'서버관련 > Command' 카테고리의 다른 글

linux 텍스트파일 분할  (0) 2012.11.07
일괄 문자 치환(사이트 이전시 유용)  (0) 2011.04.21
Vi editor  (0) 2011.04.21
tar 압축관련  (0) 2011.04.21
리눅스내 파일내용 일괄변경  (0) 2008.06.05
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.