find
명령어는 리눅스에서 파일 및 디렉터리를 검색하고, 특정 조건에 맞는 파일을 대상으로 삭제, 이동, 실행 등의 작업을 수행할 수 있는 강력한 명령어입니다.
find 명령어 기본 사용법
find [검색 시작 경로] [옵션] [작업]
- [검색 시작 경로]: 검색을 시작할 위치 (
.
현재 디렉터리,/home/user/
,/var/logs/
등) - [옵션]: 검색할 파일 조건 (
-name
,-type
,-mtime
,-size
등) - [작업]: 찾은 파일에 대해 수행할 작업 (
-print
,-delete
,-exec
등)
주요 옵션 정리
옵션 | 설명 | 예시 |
---|---|---|
-name "파일명" | 특정 이름의 파일 검색 | find . -name "test.txt" |
-iname "파일명" | 대소문자 구분 없이 검색 | find . -iname "Test.TXT" |
-type f | 파일만 검색 | find /var/log -type f |
-type d | 디렉터리만 검색 | find /home/user -type d |
-mtime +N | N일 이전 수정된 파일 | find /backup -mtime +30 |
-mtime -N | N일 이내 수정된 파일 | find /var/log -mtime -7 |
-size +N | N보다 큰 파일 (K, M, G 단위 사용 가능) | find . -size +100M |
-size -N | N보다 작은 파일 | find . -size -10K |
-empty | 빈 파일/디렉터리 검색 | find /tmp -type f -empty |
-user 사용자명 | 특정 사용자 소유 파일 검색 | find /home -user jacker |
-group 그룹명 | 특정 그룹 소유 파일 검색 | find /data -group admins |
-perm 777 | 특정 권한을 가진 파일 검색 | find / -perm 777 |
find 명령어 활용 사례
특정 디렉터리에서 .log
파일 검색
find /var/logs -type f -name "*.log"
30일 이상된 파일 삭제
find /backup -type f -mtime +30 -delete
특정 크기 이상의 파일 찾기
find /home/user -type f -size +100M
특정 사용자 소유의 파일 찾기
find /var/www -type f -user apache
실행 권한이 있는 파일 검색
find /usr/bin -type f -perm /111
빈 파일 삭제
find /tmp -type f -empty -delete
특정 파일을 찾아 다른 디렉터리로 이동
find /data -type f -name "*.bak" -exec mv {} /backup/ \;
특정 파일을 찾아 압축하기
find /logs -type f -name "*.log" -mtime +7 -exec tar -rvf archive.tar {} \;
find 결과를 xargs로 처리 (더 빠르게 실행)
find /var/log -type f -mtime +7 | xargs rm
서버 운영에 유용한 find 스크립트
1. 오래된 로그 파일 자동 삭제 스크립트
#!/bin/bash
LOG_DIR="/var/log/myapp"
LOG_FILE="./log_cleanup.log"
# 현재 날짜 기록
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 로그 정리 시작" >> "$LOG_FILE"
# 60일 이상된 로그 파일 삭제
find "$LOG_DIR" -type f -name "*.log" -mtime +60 -print -delete >> "$LOG_FILE" 2>&1
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 로그 정리 완료" >> "$LOG_FILE"
2. 특정 크기 이상의 파일 자동 정리 스크립트
#!/bin/bash
TARGET_DIR="/var/tmp"
LOG_FILE="./large_file_cleanup.log"
# 현재 날짜 기록
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 대용량 파일 정리 시작" >> "$LOG_FILE"
# 500MB 이상된 파일 목록 기록 후 삭제
find "$TARGET_DIR" -type f -size +500M -print -delete >> "$LOG_FILE" 2>&1
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 대용량 파일 정리 완료" >> "$LOG_FILE"
3. 특정 확장자의 파일을 백업 후 이동하는 스크립트
#!/bin/bash
SOURCE_DIR="/home/user/documents"
BACKUP_DIR="/home/user/backup"
LOG_FILE="./file_backup.log"
# 백업 디렉터리 생성
mkdir -p "$BACKUP_DIR"
# 현재 날짜 기록
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 파일 백업 시작" >> "$LOG_FILE"
# `.txt` 파일을 백업 후 이동
find "$SOURCE_DIR" -type f -name "*.txt" -exec mv {} "$BACKUP_DIR" \; -print >> "$LOG_FILE" 2>&1
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 파일 백업 완료" >> "$LOG_FILE"
find 와 -exec vs xargs
-exec
사용: 하나씩 처리find /var/log -type f -mtime +7 -exec rm {} \;
xargs
사용: 여러 개 묶어서 처리 (더 빠름)find /var/log -type f -mtime +7 | xargs rm
파일 개수가 많으면 xargs
가 성능 면에서 유리합니다.