728x90

1. Syntax

# find path-name expression

2. Operands

* path-name : 상대 path-name 또는 절대 path-name 모두 사용가능

* 주로 사용하는 expression

-mtime n : modify time 으로 검색

-perm [-]mode : file permission 으로 검색

-size n[c] : file size 로 검색

-user user-name : file owner 로 검색

-exec command : 명령어 수행

-ls : find 결과에 대한 ls -l 명령을 수행해 dispaly

-name filename filename과 일치하는 파일을 찾음(*,? 또는 and가 사용될 수 있으며 이들은 따옴표 안에 표시를 하거나 백슬래시를 앞에 주고 사용함)

-print 현재의 경로 이름을 표시

-perm 모드 파일 권한(permission)이 일치되는 것을 찾는다. 원하는 권한은 ls로 볼수 있는 형태와 같이 지정한다.

-type ? 형태가 같은 파일을 찾는다. 물음표(?) 부분에 디렉토리는 d, 파이프는 p, 심볼릭 링크는 l, 소켓은 s, 블록 파일은 b, 일반 파일은 f 등의 기호를 사용한다.

-links ? 특정 개수의 링크를 가진 파일을 찾는다. 물음표 부분에 링크의 숫자를 표기한다.

-size ? 파일의 크기가 일치하는 것을 탐색. 파일 크기는 블록단위로 물음표 부분에 지정한다. 한 블록은 512바이트로 내정되어 있지만 블록 숫자 뒤에 단위로 k자를 붙이면 1킬로바이트 크기의 블록 숫자로 간주 된다.

-uesr 사용자 파일 사용자의 ID에 따라서 검색. 로그인 이름이나 번호 모두가 가능하다.

-atime ? 최근 며칠내에 액세스한 파일을 검색. 날짜수는 ?에 명시한다.

-exec 명령 원하는 검색 조건에 맞는 파일을 찾으면 명시된 명령을 실행한다. 명령의 끝은 \;을 사용하여 끝낸다. find가 검색해낸 파일의 이름을 인수로 사용하고 싶다면 그 위치에 {}를 사용한다.

-newer 파일 어떤 파일보다 최근에 갱신된 모든 파일을 검색한다.

3. Example

# find . -name "sc*" -print 또는 # find . -name "sc*"

/* 현재 directory 를 기준으로 sc로 시작하는 file 을 찾아 display */

# find ./ -mtime 30 -print -exec rm {} \;

/* 모든 directory 에서 30일 전에 수정된 file 을 display 하고 그 file 들을 삭제함 */

# find . -perm -4000 -user root -ls

/* root user 의 setuid 가 정의되어 있는 file 을 찾아 display */

# find . -size +1000000c -ls

/* file size 가 1MB 가 넘는 것을 찾아 display */

# find . -size +1000000c -print -exec rm {} \;

/* file size 가 1MB 가 넘는 것을 찾아 display 하고 그 file 들을 삭제함 */

4. 문자열찾기 방법 1 - 영어만 주로 가능
# grep -rw "찾는문자열" ./

문자열찾기 방법 2 - 대/소문자 구분 안하고 검색
# grep -i -l "찾는문자열" * -r 2> /dev/null

문자열찾기 방법 3 - 한글, 영어 모두 가능
# find . -exec grep -l "찾는문자열" {} \; 2>/dev/null

문자열찾기 방법 4 - 한글,영어, 대소문자 안가리고 검색
# find . -exec grep -i -l "찾을문자열" {} \; 2>/dev/null

문자열찾은 후 치환
# find . -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} \; 2>/dev/null

파일명 찾기
# find ./ -name 파일명 -type f

파일명 찾기(대소문자 구별없음)
# find ./ -iname 파일명 -type f

디렉토리 찾기
# find ./ -name 파일명 -type d

디렉토리 찾기(대소문자 구별없음)
# find ./ -iname 파일명 -type d

특정 사용자 소유의 모든 파일을 찾을때는?
# find ./ -user "사용자 ID" -print

두세가지 문자열을 동시에 찾아야 할때는 egrep을 쓰면 아주 편합니다.
예를 들어
만약 그냥 grep으로 문자열1,2 를 찾으려면
ps -ef | grep 문자열1; ps -ef | grep 문자열2
와 같이 해야하는것을 egrep를 이용하면

ps -ef | grep '문자열1|문자열2'
와 같이 간단해집니다.

# egrep '(pattern1|pattern2|pattern3)' file.txt

4. 날짜와 날짜사이 생성파일 찾기

# touch -t 200110020000 a.txt
(2001년 10월 02일 00시 00분 생성날짜를 가진 파일 생성)
# touch -t 200810312359 b.txt
(2001년 10월 26일 23시 59분 생성날짜를 가진 파일 생성)

# find ./ -newer a.txt -a ! -newer b.txt -ls
(a.txt 와 b.txt 파일 사이의 생성날짜를 가진 파일 검색)

728x90

'프로그래밍 > 리눅스' 카테고리의 다른 글

톰켓설치  (0) 2013.09.30
Linux java 설치  (0) 2013.09.30
vi 명령 정리  (0) 2012.04.18
linux ftp client 사용법  (0) 2012.04.10
VI Editor 사용법  (0) 2012.03.23

+ Recent posts