[리눅스 명령어] find 명령어 완전 정복

2025. 5. 22. 11:43·linux
728x90
반응형

find 기본 구조

find [검색 시작 위치] [조건] [실행할 동작]


1. 파일/디렉토리 탐색 기본 예제

find . -name "*.log"
  • 현재 디렉토리 이하에서 .log로 끝나는 파일을 찾는다.
find /var -type d -name "nginx"
  • /var 아래에서 이름이 nginx인 디렉토리를 찾는다.

옵션설명

-name 파일 이름을 패턴으로 찾기 (*.txt)
-type 파일 유형 지정 (f: 파일, d: 디렉토리)
-size 크기 기준 (+100k, -1M, 10G)
-mtime 수정한 지 N일 지난 파일 (-mtime +7)
-user 특정 사용자가 소유한 파일

2. -exec를 사용해 찾은 파일에 명령 실행하기

find . -name "*.log" -exec rm {} \;
  • .log 파일을 모두 찾아 삭제한다.
  • {}은 찾은 파일명을 의미하며, \;로 명령어 끝을 표시한다.

여러 명령어를 실행할 수도 있다:

find . -type f -name "*.sh" -exec chmod +x {} \; -exec echo "권한 부여 완료: {}" \;

3. xargs를 사용해 성능 향상시키기

xargs는 find로 찾은 결과를 한번에 전달받아, 보다 효율적으로 명령을 실행할 수 있다.

기본 사용법

# .log 파일을 모두 삭제
find . -name "*.log" | xargs rm
  • -exec는 파일마다 1번씩 실행되지만, xargs는 한번에 묶어서 실행하므로 빠르다.

공백/특수문자 대응 (-print0, -0)

# 공백이 포함된 파일명에도 안전하게 삭제
find . -name "*.log" -print0 | xargs -0 rm

서브 디렉토리 내 .log 파일을 gzip으로 압축

# 용량이 큰 로그 파일을 모두 압축 처리
find . -type f -name "*.log" -size +1M -print0 | xargs -0 gzip

찾은 파일명을 인자로 스크립트에 넘기기

# process\_file.sh 스크립트를 통해 각 파일 후처리
find ./logs -name "*.log" -print0 | xargs -0 -I {} ./process_file.sh "{}"
  • -I {}는 {} 자리에 파일명이 들어가게 하며, 각 결과마다 명령이 실행된다.
  • 하나하나 명령어에 넣되, xargs가 처리하므로 효율은 유지된다.

다중 명령 조합 (삭제 후 로그 남기기)

# \*.tmp 파일을 삭제하면서 어떤 파일이 삭제되었는지 로그로 남김
find . -name "*.tmp" -print0 | xargs -0 -I {} sh -c 'rm "{}" && echo "{} deleted" >> deleted.log'

4. 정규표현식으로 패턴 검색 (-regex)

find . -regex ".*\.\(jpg\|png\|gif\)$"
  • .jpg, .png, .gif로 끝나는 파일을 찾는다.
find . -regex '.*/[0-9]{4}-[0-9]{2}-[0-9]{2}\.log'
  • 2024-05-21.log 같은 날짜 포맷 파일만 검색

기본적으로 -regex는 전체 경로(/home/user/file.txt)를 대상으로 한다는 점을 유의해야 한다.


5. 복합 조건 검색 (-and, -or, !)

find . -type f -name "*.log" -size +10M
  • 10MB 초과 .log 파일 검색
find . \( -name "*.log" -or -name "*.txt" \) -mtime -3
  • 최근 3일 이내 수정된 .log 또는 .txt 파일 검색

  1. 실행 방법 및 환경 설정
  • 모든 예제는 기본적인 Bash 쉘 환경에서 동작하며, Ubuntu/CentOS/macOS 모두에서 사용 가능하다.
  • xargs, find는 기본으로 포함된 유틸리티지만, 정규표현식 옵션 사용 시 GNU findutils 버전 여부에 따라 동작이 다를 수 있다.
  • 특수 문자나 공백이 있는 파일명을 다룰 경우 반드시 -print0, -0 조합 사용을 권장한다.

표로 요약

이름으로 찾기 find . -name "*.txt" .txt 파일 탐색
크기 기준 find . -size +10M 10MB 초과
수정 날짜 find . -mtime -1 하루 이내 수정
삭제 find . -name "*.log" -exec rm {} \; 삭제
정규표현식 find . -regex ".*\.log" 정규식 매칭
xargs `find . -name "*.txt" xargs cat`

최종 정리

  • find는 리눅스에서 파일 검색과 후처리를 동시에 처리할 수 있는 강력한 도구다.
  • -exec, xargs는 단순한 검색을 넘어서 후속 작업까지 자동화할 수 있도록 해주며, -regex는 고급 패턴 필터링에 유용하다.
  • 실전에서는 항상 공백/한글/특수문자 파일명 처리까지 고려한 명령어 구성이 중요하다.
728x90
반응형

'linux' 카테고리의 다른 글

[리눅스 유저 & 그룹 관리] useradd, usermod, passwd, groupadd  (0) 2025.05.26
[리눅스 기본기] redirect, pipe, grep – 셋만 알아도 터미널이 쉬워진다  (0) 2025.05.23
[리눅스 기본기] vi 에디터 단축키 정리 - 이동, 복사, 삭제, 검색, 대치  (0) 2025.05.22
[리눅스 명령어] cat, head, tail  (0) 2025.05.22
가상화 (vmware fusion - Mac m1)  (2) 2025.05.22
'linux' 카테고리의 다른 글
  • [리눅스 기본기] redirect, pipe, grep – 셋만 알아도 터미널이 쉬워진다
  • [리눅스 기본기] vi 에디터 단축키 정리 - 이동, 복사, 삭제, 검색, 대치
  • [리눅스 명령어] cat, head, tail
  • 가상화 (vmware fusion - Mac m1)
highgarden
highgarden
커밋 하나하나가 쌓여 커다란 정원이 되는 중입니다. 하루하루 정성껏 심어가는 중 https://github.com/highgarden7
  • highgarden
    커밋심는 정원
    highgarden
  • 전체
    오늘
    어제
    • 분류 전체보기 (37)
      • ai (1)
      • devops (2)
      • Nest.js (14)
      • linux (14)
      • 네트워크 (6)
      • git (0)
      • aws (0)
      • docker (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    Linux
    springboot
    Java
    Chat GPT
    vercel
    네트워크
    nestjs
    githib action
    IP
    E2E
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
highgarden
[리눅스 명령어] find 명령어 완전 정복
상단으로

티스토리툴바