[Linux] 리눅스 find 명령어




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 +NN일 이전 수정된 파일find /backup -mtime +30
-mtime -NN일 이내 수정된 파일find /var/log -mtime -7
-size +NN보다 큰 파일 (K, M, G 단위 사용 가능)find . -size +100M
-size -NN보다 작은 파일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가 성능 면에서 유리합니다.




Leave a Comment