주어진 조건에 따라 디렉토리의 트리를 검색하여 해당되는 파일을 찾는 명령어이다.

사용법 : find [패스] [옵션] [작업] 
-name name : 지정된 이름의 파일을 찾는다. 
-user name : user 소유의 파일을 찾는다. 
-type [bcdfls] : 지정된 형식의 파일을 찾는다. 
 b 블록파일 
 c 문자 
 d 디렉토리 
 f 파일 
 l 링크파일 
 s 소켓 
-size [+/-]n[bckw] : 지정된 크기의 파일을 찾는다. 
 +n n보다 크다 
 -n n보다 작다 
 n n이다 
 b 512-byte 
 c byte 
 k kilobytes 
 w 2-byte 
-inum number : 지정한 inode 번호와 파일을 찾는다. 
-print : 표준출력으로 검색된 파일명을 출력한다. 
-exec command {} \; : 찾은 각 파일에 대해 지정된 명령을 실행한다. 
-ok command {} \; :실행여부를 사용자에게 확인한 후 명령을 실행한다. 

find 명령어는 복잡해 보이는 파일 시스템 구조를 갖는 리눅스에서 파일을 찾는 명령어이다. 실제로 find는 파일 검색보다 선택 조건에 일치하는 파일을 찾아서 명령을 실행하는 파일 시스템으로 사용된다.
기본적으로 이름으로 찾는 find 사용법을 알아보고 명령 행을 이용한 find 사용법을 알아 보자.
find는 검색할 경로를 미리 정의한 후 옵션과 사용법이 붙게 된다. root 디렉토리에 word.awk를 검색해보자. 이름을 기준으로 검색할 경우 -name 옵션을 사용해야 한다.

# find /root -name word.awk 
/root/word.awk 

exec command \; 는 find가 찾아낸 각각의 파일에 대해 command를 실행한다.
command는 \; 로 끝나야 한다.

A.현재 디렉토리에 있는 모든 파일명 나열하기

# find . -print 

B.현재 디렉토리에 있는 디렉토리 나열하기

# find . -type d -print 

C.현재 디렉토리에서 파일 이름에 공백 문자가 들어간 모든 파일을 삭제하기

# find . -name "* *" -exec rm -f {} \; 

D. 현재 디렉토리 파일들 중 파일이름에 정상적이지 않은 글자를 포함한 파일을 지우기

# for filename in * 
>do 
>badname=echo "$filename" | sed -n >/[\+\{\;\"\\\=\?~(\)\<\>\&\*\/\$]/p 
>rm $badname 2>/dev/null 
>done 



E.원하는 파일시스템 모두 복사하기


# mkdir /hdc1 
# mount /dev/hdc1 /hdc1 
# cd /home 
# find . -depth -print | cpio -pmdvl /hdcl 

F.지난 24시간 동한 변경된 모든 파일 목록을 changelist 파일에 만들기

# find / -mtime -1 \! -type d -print > chagelist 
2005/06/21 20:10 2005/06/21 20:10

트랙백 주소 :: 이 글에는 트랙백을 보낼 수 없습니다