unix

find를 이용해 파일찾기

jeeyong 2008. 9. 8. 14:34

find 명령을 사용하여 특정 조건에 맞는 파일을 디렉토리와 그 하위 디렉토리에서 찾을 수 있습니다. 찾은 파일에서 명령을 수행할 수 있습니다.

패턴이 일치하는 파일 찾기

find구문이 복잡하기는 하지만, HP-UX를 더욱 생산적으로 사용할 수 있습니다. 강력하고 융통성있는 명령입니다. 그러나, 디렉토리가 많을 경우에는 느리게 실행될 수 있습니다.

현재 디렉토리와 하위 디렉토리에서 d로 시작하는 모든 파일을 찾으려면 다음을 입력하십시오.

find(1)

$ find . -name 'd*'

점(.)은 find 가 현재 디렉토리와 하위 디렉토리를 찾도록 합니다. -name 선택사항 뒤에는 파일 이름이나 파일 이름 패턴(이 경우에는 d*)이 오는데, 패턴이 일치하는 모든 파일의 이름을 찾습니다. 이 보기에서 findd로 시작하는 모든 파일 이름을 찾습니다.

d*는 작은 따옴표 'd*'로 묶습니다 . find 명령에서 파일 이름 패턴을 사용할 경우에는 쉘이 정확하게 해석할 수 있도록 따옴표로 묶어야 합니다.

특정 파일보다 새로운 파일 찾기

특정 파일 이후에 수정된 모든 파일을 찾는다고 가정합시다. /home/leslie디렉토리와 그 하위 디렉토리에 있는 myfile보다 새로운 파일을 나타내려면, 다음을 입력하십시오.

$ find /home/leslie -newer myfile

이 보기는 /home/Lee 디렉토리와 그 하위 디렉토리에서 myfile이후에 수정된 모든 파일을 찾아서 화면에 모두 출력하라는 의미입니다. (파일이 마지막으로 수정된 일자와 시간을 알려면, ll명령을 사용하십시오.)

파일에서 명령 수행

find 명령을 받는 파일에서 다른 명령을 수행할 수 있습니다. 현재 디렉토리와 하위 디렉토리에서 .tmp라는 확장 이름을 가진 모든 파일을 삭제하려면, 다음을 입력하십시오.

$ find . -name '*.tmp' -exec rm {} \;

현재 디렉토리와 하위 디렉토리에서 .tmp로 끝나는 모든 파일을 찾아서 화면에 나타내고 그 파일을 모두 삭제합니다. -exec 선택사항은 다음 명령 (rm)을 실행합니다. { } 는 find 명령이 찾은 파일을 의미합니다. 명령 문자열을 끝내는 세미콜론 (;) 앞에
ESC 문자로 역빗금(\)을 붙입니다.

논리 연산자 사용

find 구문에 NOT, AND, OR같은 논리 연산자를 사용할 수 있습니다.

특정 형식에 일치하지 않는 파일을 찾으려면, 논리 연산자 NOT을 나타내는 !선택사항을 사용하십시오. 이 선택사항 뒤에는 파일 이름과 같이 파일 속성을 정의하는 선택사항을 사용하여야 합니다. 그러면, 지정된 속성이 없는 파일을 찾습니다.

예를 들면, /tmp에서 leslie없는 모든 파일을 찾으려면, 다음 명령을 사용합니다.

$ find /tmp \( ! -user leslie \)

쉘이 괄호를 특수 문자로 해석하지 않도록 ESC 문자인 \을 앞에 붙입니다.

두 개의 속성이 있는 파일을 찾으려면, 논리 연산자 AND인 expression -a
expression
선택사항을 사용하십시오. 예를 들어, /에서 Lee에 있는 모든 디렉토리를 찾으려면 다음 명령을 사용합니다.

$ find / \( -type d -a -user Lee \)

둘 중에서 한 개의 속성이 있는 파일을 찾으려면, 논리 연산자 OR인 expression -o expression 선택사항을 사용하십시오. 예를 들어, 일주일 동안 사용하지 않은 a.out이나 .o인 파일을 삭제하려면 다음 명령을 사용하십시오.

$find / \(-name a.out -o -name '*.o' \)-atime +7 -exec rm {}\;



특정 날짜 이후의 파일 찾기


$ touch -t 200802051720 bingo.tmp
$ find . -newer ./bingo.tmp -name "*.c"

touch를 이용 원하는 시간의 파일을 생성 한다. 생성한 파일보다 나중에 생성된 "*.c" 파일을 찾는다.



특정 날짜 사이에 파일 찾기


$ touch -t 200801010000 start.tmp
$ touch -t 200802050000 end.tmp
$ find . -newer start.tmp -a ! -newer end.tmp

touch를 이용 원하는 시간의 파일을 생성 한다. find의 -newer 옵션과 비교 연산자, 무정 연산자를 이용하여 생성한 임시파일 사이의 파일을 구한다.



[출처]
http://docs.hp.com/ko/B2355-90167/ch02s18.html

tip :
현재 날짜 이후 파일 touch 하기  
touch touchtime.txt (현재시간을 기록한 파일생성 및 터치)
find . -newer touchtime.txt -ls (현재 시간 이후의 파일들)
find . -newer touchtime.txt -exec touch {} \; (현재 날짜 이후 파일 터치)

ps. 때때로 파일을 싱크할때 싱크된파일의 날짜가 미래에서 온 파일로 인식되는경우가 있다. 종종이런 일을 경험하게 되어 touch 옵션을 찾던중에 touch와 find를 이용한 해결방안을 찾아 포스팅한다.

'unix' 카테고리의 다른 글

scp 사용법  (0) 2009.02.11
Linux 파일 압축과 파일 묶기 - tar gzip gunzip bzip2 bunzip  (0) 2009.02.11
리눅스 계정관리  (0) 2008.12.29
crontab -r 했을 때 복구하는 방법  (1) 2008.09.17
vi 에디터 사용법  (0) 2008.05.07