본문 바로가기
Linux

[linux] find 사용법.

by ds31x 2024. 5. 11.

find 명령어 사용법

find 명령어는 UNIX 및 Linux 기반 시스템에서
파일이나 디렉토리를 검색할 때 사용하는 S/W.


이 명령어는 지정된 "[검색 시작 경로]"에서부터 파일 시스템을 순회하며

주어진 조건에 맞는 파일이나 디렉토리를 검색함.


기본 구조

find [검색 시작 경로] [옵션과 조건] [행동]
  • 검색 시작 경로: 검색을 시작할 디렉토리 경로.
  • 옵션과 조건:
    • 검색 처리 방식을 제어 (예: 깊이 우선 검색, 너비 우선 검색 등).
    • 검색 조건을 지정 (예: 파일 이름, 수정 시간, 파일 크기 등).
  • 행동: 검색된 결과에 대해 수행할 작업을 지정 (예: 파일 출력, 명령 실행 등).

예제

  1. 현재 디렉토리에서 .txt 확장자를 가진 모든 파일 찾기
    • find . -name "*.txt"
  2. 시스템 전체에서 30일 이상 수정되지 않은 .log 파일 찾기
    • find / -name "*.log" -mtime +30
    • 단위는 day이며, +10 은 10일 이상, -10 은 0에서 10일까지 를 의미하며, 10 은 정확히 10일을 의미.
  3. 홈 디렉토리에서 크기가 100MB 이상인 파일 찾기
    • find ~/ -size +100M
  4. 특정 사용자가 소유한 파일 찾기
    • find /path/to/search -user username
  5. 파일을 찾은 후에 실행할 명령 지정 (예: 찾은 파일 삭제)
    • find /tmp -type f -name "*.tmp" -exec rm {} \;
  6. 10MB 이상 50MB 이하인 파일 찾기
    • find / -size +10M -size -50M

옵션과 조건

find 명령어에서 사용하는 옵션과 조건들은

  • 검색의 방식을 변경하거나,
  • 검색 범위를 조절하고,
  • 출력 결과를 특정 방식으로 필터링할지를 결정함.

다음은 find 명령어에서 자주 사용되는 몇 가지 주요 옵션 및 조건들임:

  1. -name pattern
    • 파일 이름이 주어진 패턴과 일치하는 파일을 찾음.
    • 예: find / -name "*.txt"
    • wildcard (*, ?) 사용 가능함.
  2. -iname pattern
    • -name과 비슷하지만 대소문자를 구분하지 않음 (i는 ignore case를 의미).
    • 예: find / -iname "example.txt"
    • 위의 예는 Example.txt, example.txt, EXample.TXT 등을 검색.
  3. -type type
    • 파일 타입에 따라 파일을 찾음 (f는 일반 파일, d는 디렉토리, l은 심볼릭 링크 등).
    • 예: find / -type d
  4. -size [+-]size[cwbkMG]
    • 파일 크기에 따라 파일을 검색.
    • +는 이상, -는 이하를 의미하며, 뒤에 크기 단위를 붙일 수 있음
    • c는 바이트, k는 킬로바이트, M은 메가바이트, G은 기가바이트.
    • 예: find / -size +100M
  5. -mtime [+-]n
    • 파일의 내용이 마지막으로 수정된 시간(modified time)을 기준으로 검색.
    • n은 day(일) 수를 의미하며, +는 n일보다 오래된 파일을, -는 n일보다 적게 지난 파일을 검색.
    • 예: find / -mtime -7 (최근 7일 이내에 수정된 파일 찾기)
    • 비슷한 조건으로
      • -atime : access time (파일접근시간)
      • -ctime : changed time (파일의 meta-data가 변경된 시간)
  6. -maxdepth levels
    • 검색할 디렉토리의 최대 깊이를 지정하는 옵션
    • 0은 시작 디렉토리만을 의미.
    • 예: find /home -maxdepth 1 -name "*.txt"
  7. -mindepth levels
    • 검색을 시작할 최소 디렉토리 깊이를 지정하는 옵션
    • 1은 시작 디렉토리의 바로 하위 디렉토리부터 검색을 시작함을 의미.
    • 예: find /home -mindepth 2 -name "*.txt"
  8. -user username
    • 지정된 사용자가 소유한 파일을 검색.
    • 예: find / -user root
  9. -perm mode
    • 파일 권한이 지정된 모드와 일치하는 파일을 검색.
    • 모드는 숫자로 지정됨.
    • 예: find / -perm 644
  10. -newer file
    • 지정된 file보다 더 최근에 수정된 파일을 검색.
    • 예: find / -newer config.txt
  11. and, or
    • -and
    • -or
    • 옵션과 조건들을 조합하는데 사용됨.
  12. 기타 조건
    • -empty: 파일 또는 디렉토리가 비어있어야 함 (파일은 0바이트, 디렉토리는 자식이 없음).
    • -executable: 파일이 실행 가능해야 함.
    • -readable: 파일이 읽을 수 있어야 함.
    • -writable: 파일이 쓸 수 있어야 함.

이러한 옵션과 조건들을 조합하여 사용함으로써,
find 명령어는 매우 강력하고 유연한 파일 검색 도구를 제공함.


행동

find 명령어에서 "행동"을 지정하는 방법은 검색된 결과에 대해 수행하고 싶은 특정 동작을 명시하는 것을 의미.

다음은 가장 일반적으로 사용되는 행동 명령어들임:

  1. -print
    • 검색된 파일의 전체 경로명을 stdout으로 출력.
    • 대부분의 find 명령에서는 -print가 기본임.
    • 예제: find . -type f -print
  2. -exec
    • 이 행동은 검색된 각 파일에 대해 지정된 명령을 실행.
    • 명령에 검색된 파일들은 argument로 넘겨지며 이들은 {}를 사용하여 표현됨: 실제 수행시  검색된 각 파일명으로 대체됨.
    • 명령의 끝은 반드시 ; (세미콜론)으로 종료되어야 하며, 이는 보통 \;로 표기하여 shell에 의해 해석되는 것을 방지함.
    • 예제: find /home -type f -name "*.txt" -exec chmod 644 {} \;
    • 참고: 2023.10.22 - [Linux] - [Linux] 특정 조건의 파일들 찾아 특정 명령어 적용하기 : find -exec
  3. -execdir
    • -exec와 비슷하지만, 명령을 각 파일이 위치한 디렉토리에서 실행됨.
    • 예제: find /home -type f -name "*.sh" -execdir chmod 755 {} \;
  4. -delete
    • 이 행동은 검색된 파일을 바로 삭제.
    • 삭제와 관련되므로 매우 주의해서 사용해야 함.
    • 반드시 테스트로 실제 검색되는 파일들을 확인한 후 사용할 것.
    • 예제: find /tmp -type f -name "*.tmp" -delete
  5. -ok
    • -exec와 유사하지만, 각 파일에 대해 명령을 실행하기 전에 사용자의 확인을 요청.
    • 예제: find / -type f -name "*.log" -ok rm {} \;
  6. -ls
    • 검색된 각 파일에 대한 자세한 정보를 ls -l과 비슷한 형식으로 출력.
    • 예제: find . -type f -name "*.conf" -ls

결론

find 는 매우 다양한 옵션과 조건을 제공함.

사용자는 매우 구체적인 검색 요구 사항에 맞게 조정할 수 있고 find 명령어를 스크립트 등에서 매우 자주 사용함.

시스템 관리 작업에 있어서 필수적인 도구임.

728x90

'Linux' 카테고리의 다른 글

[Linux] cron and crontab  (0) 2024.06.27
[linux] example: sed: -r or -E  (0) 2024.05.11
[linux] example: sed: -f option  (0) 2024.05.11
[linux] example: sed: -e option  (0) 2024.05.11
[linux] example: sed: -n option  (0) 2024.05.11