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 파일 검색
- 실행 방법 및 환경 설정
- 모든 예제는 기본적인 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 |