본문 바로가기

리눅스

find 명령어

728x90

find 명령어

find 명령어는 Linux와 Unix 기반 시스템에서 파일과 디렉토리를 검색하는데 사용되는 강력하고 다용도의 명령어입니다. find 명령어를 사용하면 파일 이름, 크기, 유형, 수정 시간 등 다양한 속성에 따라 파일들을 검색할 수 있습니다.

find 명령어 기본 문법

find [-H] [-L] [-P] [-Olevel] [-D debugopts] [path...] [expression]
find [검색할 경로] [옵션] [동작]
  • find 명령어 옵션
    • find 명령어는 검색 대상 디렉토리와 함께 다양한 옵션을 사용할 수 있습니다.
옵션 설명
-name 파일 이름으로 검색
-type 파일 타입으로 검색 (f: 일반 파일, d: 디렉토리, l: 심볼릭 링크)
-size 파일 크기로 검색
-mtime 파일 수정 시간으로 검색
-exec 검색 결과에 대해 명령어 실행

 

find 명령어에서 사용되는 ctimemtime는 파일의 시간과 관련하여 다른 속성을 나타냅니다.

 

이 두 속성은 파일의 상태를 기준으로 하는데, 다음과 같은 차이점이 있습니다.

 

  • ctime (Change Time)
    • ctime은 파일의 상태가 마지막으로 변경된 시간을 나타냅니다.
    • 파일의 상태란 파일의 속성(메타데이터)이 변경된 시간을 말합니다. 즉, 파일의 내용이 변경되거나 파일의 소유자, 그룹, 권
    • 한 등의 속성이 변경되었을 때 ctime이 업데이트됩니다.
    • 파일의 내용이 변경되면 ctime이 업데이트되므로, 파일의 크기가 변경되더라도 ctime이 변경됩니다.
    • find 명령어에서 -ctime 옵션을 사용하면, 파일의 상태가 기준일보다 지난 시간인 파일들을 찾을 수 있습니다.
  • mtime (Modification Time)
    • mtime은 파일의 내용이 마지막으로 변경된 시간을 나타냅니다.
    • 파일의 내용이 변경되면 mtime이 업데이트됩니다. 파일의 속성이 변경되는 경우에는 mtime이 변경되지 않습니다.
    • find 명령어에서 -mtime 옵션을 사용하면, 파일의 내용이 기준일보다 지난 시간인 파일들을 찾을 수 있습니다.

간단히 말하면, ctime은 파일의 상태가 변경된 시간을 의미하고, mtime은 파일의 내용이 변경된 시간을 의미합니다. 따라서, -ctime 또는 -mtime 옵션을 사용하여 파일들을 찾을 때 어떤 기준을 사용할지 잘 구분하여 사용해야 합니다.

find 명령어의 예시

  • 파일 이름으로 검색
find /home -name "file.txt"

/home 디렉토리에서 file.txt 파일 이름을 가진 파일을 검색합니다.

 

  • 특정 패턴을 포함한 파일 검색
find /path/to/search -name "*pattern*"
  • 특정 확장자 파일 검색
find /var/log -name "*.log"

/var/log 디렉토리 아래 모든 .log 확장자 파일을 검색합니다.

728x90

 

  • 파일 크기로 검색
find /home -size +10M

/home 디렉토리에서 10MB 이상 크기의 파일을 검색합니다.

 

  • 파일 유형으로 검색
find /home -type f
  • 수정된 지 일정 기간이 지난 파일 검색
find /var/log -type f -mtime +30

/var/log 디렉토리 아래 모든 파일 중 30일 이상 수정되지 않은 파일들을 검색합니다.

 

  • 수정된 지 일정 기간이 지난 파일 삭제
find /var/log -type f -mtime +30 -exec rm {} \;

/var/log 디렉토리 아래 모든 파일 중 30일 이상 수정되지 않은 파일들을 삭제합니다.

 

  • 파일 수정 시간으로 검색
find /home -mtime +7

/home 디렉토리에서 7일 이전에 수정된 파일을 검색합니다.

 

  • 검색된 파일들에 대해 특정 명령 실행
find /path/to/search -name "filename" -exec command {} \;

여기서 {}는 검색된 각 파일을 의미하고, \;-exec 옵션으로 실행할 명령의 끝을 나타냅니다.

find /home -name "*.log" -exec rm {} \;

/home 디렉토리에서 .log 확장자를 가진 파일을 검색하고, 검색 결과에 대해 rm 명령어를 실행하여 파일을 삭제합니다.

 

  • 참고사항
    • find 명령어를 사용할 때 검색 대상 디렉토리의 권한 설정에 주의해야 합니다.
    • 검색할 디렉토리가 매우 큰 경우에는 검색 시간이 오래 걸릴 수 있습니다. 따라서 가능한 검색 대상을 좁게 설정해야 합니다.

 

참고URL

- find 명령어 : https://sangchul.kr/136

 

728x90