OS/공통-명령어

[명령어] find 명령어 이해

투칼론 2017. 7. 8. 14:30
반응형

find 라는 명령어는 시스템 관리자가 자주 사용하는 명령어 중 하나이다. 디스크에 있는 파일 또는 디렉터리를 검색하는 명령어이다.



사용법


find <경로> <연산자>


위에서 <경로>는 find가 파일 또는 디렉터리를 찾기 위한 최상 위치이다.

예을 들면, '/'는 루트(root) 디렉터리 부터 찾고, '.'은 현재 디렉토리 부터 찾는다.


아래 예제는 루트 디렉터리부터 하위 디렉터리까지 확장자가 .sh 인 파일을 찾는다.

$ find / -name "*.sh"



예제


기본적인 예제는 생략하고, 시스템 관리자가 유용하게 사용할 수 있는 몇 개 예제를 기술한다.


<예제1>

특정 파일시스템이 과도하게 사용하는 경우에 파일 크기가 100M 이상인 파일을 찾을때,

$ find / -size +102400k -print | xargs ls -l

또는

$ find / -size +102400000c -print | xargs ls -l


<예제2>

특정 파일을 정리하고자 할때 사용되는 오래동안(예, 30일 이상) 수정되지 않은 파일을 찾을때,
$ find / -mtime -30 -print


<예제3>

애플리케이션 또는 구성 파일 등 내용이나 속성값 변경이 의심될때, 최근 특정 시간(예, 1일) 기준으로 변경된 파일을 찾을 때,

$ find / -ctime -1 -a -type f | xargs ls -l 


<예제4>

파일이 아닌 디렉터리를 찾을 때,

$ find / -name httpdocs -type d


<예제5>

대소문자 구분없이 파일명으로 검색할 때,

$ find / -iname [문자열]    (Linux는 지원하나, 타 Unix는  iname 옵셥을 지원하지 않을 수 있음)

또는

$ find /  | grep -i [문자열]


<예제6>

파일명에 특수문자가 포함되어 파일을 관리자가 삭제하기 곤란한 경우에는 inode 값으로 조회하여 삭제할 수 있다. 이때 사용하는 명령어는 아래와 같다.


$ ls  -il     (파일목록과 함께 inode 값도 표시)

$ find   .   -inum  [inode번호]  (위에서 조회한 inode에 해당하는 파일을 찾음)

$ find  .   -inum [inode번호]  -exec rm {} \;   (해당 inode값을 가지고 있는 파일 삭제)


<예제7>

심볼릭 링크가 있는지 검색할 때, 

$ find / -type l -exec ls -l {} \; 


<예제8>

확장자 txt 파일을 찾아 해당 파일에서 문자열 "foo"를 "bar"를 치환한하여 표준 출력한다.

$ find . -type f -name "*.txt" -exec sed -i "s/foo/bar/g" {} \;

참고) sed -i 옵션은 Linux에서 사용가능함


<예제9>

IP 주소 (xx.xx.xx.xx) 형식의 문자열을 보유하고 있는 파일 목록을 출력한다.

$ find . -name *.* | xargs grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"


<예제10>

특정 문자열이 있는 파일명과 라인번호를 출력한다.

$ find  .  -name  "*.properties"  | awk  '/문자열/ {print FILENAME, NR}'  {}  \;


<예제11>

복수 개의 파일 확장자를 가진 파일을 출력한다.

$ find  .  \( -name "*.html" -o -name "*.js*" -o -name "*.txt" \)



[글참조] mtime vs. ctime vs. atime