Linux에서 파일과 디렉토리 찾기

Linux 시스템에서 파일과 디렉토리를 효율적으로 찾는 다양한 방법을 소개합니다.

1. find - 강력한 파일 검색 명령어

가장 강력하고 유연한 파일 검색 도구입니다.

기본 사용법

# 현재 디렉토리에서 특정 파일명 찾기
find . -name "filename.txt"

# 대소문자 구분 없이 찾기
find . -iname "filename.txt"

# 특정 디렉토리에서 찾기
find /home/user -name "*.log"

파일 타입으로 찾기

# 일반 파일만
find . -type f -name "*.txt"

# 디렉토리만
find . -type d -name "backup"

# 심볼릭 링크만
find . -type l

파일 크기로 찾기

# 100MB보다 큰 파일
find . -type f -size +100M

# 10KB보다 작은 파일
find . -type f -size -10k

# 정확히 1GB 파일
find . -type f -size 1G

# 크기 단위: c(bytes), k(KB), M(MB), G(GB)

수정 시간으로 찾기

# 7일 이내 수정된 파일
find . -type f -mtime -7

# 30일 이전 수정된 파일
find . -type f -mtime +30

# 24시간 이내 수정된 파일
find . -type f -mmin -1440

# 최근 1시간 이내
find . -type f -mmin -60

권한으로 찾기

# 특정 권한을 가진 파일
find . -type f -perm 0644

# 실행 권한이 있는 파일
find . -type f -perm /111

# SUID가 설정된 파일
find / -type f -perm -4000 2>/dev/null

소유자로 찾기

# 특정 사용자 소유 파일
find . -user username

# 특정 그룹 소유 파일
find . -group groupname

찾은 파일에 명령 실행

# 찾은 파일 삭제
find . -name "*.tmp" -type f -delete

# 찾은 파일에 명령 실행
find . -name "*.log" -type f -exec rm {} \;

# 확인 후 실행
find . -name "*.log" -type f -ok rm {} \;

# 여러 파일을 한번에 처리 (더 빠름)
find . -name "*.log" -type f -exec rm {} +

복합 조건

# AND 조건 (기본)
find . -name "*.txt" -size +1M

# OR 조건
find . -name "*.txt" -o -name "*.log"

# NOT 조건
find . -type f -not -name "*.txt"

# 괄호 사용 (복잡한 조건)
find . \( -name "*.txt" -o -name "*.log" \) -size +1M

실용적인 예시

# 빈 파일 찾기
find . -type f -empty

# 빈 디렉토리 찾기
find . -type d -empty

# 특정 확장자를 제외하고 찾기
find . -type f ! -name "*.git*"

# 숨김 파일 찾기
find . -name ".*"

# 중복 파일 찾기 (같은 이름)
find . -type f -printf '%f\n' | sort | uniq -d

# 최근 수정된 파일 10개
find . -type f -printf '%T+ %p\n' | sort -r | head -10

2. locate - 빠른 파일 검색

데이터베이스를 사용하여 매우 빠르게 파일을 찾습니다.

# locate 설치
sudo apt install mlocate # Ubuntu/Debian
sudo yum install mlocate # CentOS/RHEL

# 데이터베이스 업데이트
sudo updatedb

# 파일 찾기
locate filename.txt

# 대소문자 구분 없이
locate -i filename.txt

# 정확한 경로만
locate -b '\filename.txt'

# 개수 제한
locate -l 10 "*.conf"

# 통계 정보
locate -S

3. grep - 파일 내용으로 검색

파일 내용을 검색하여 특정 텍스트를 포함한 파일을 찾습니다.

기본 사용법

# 단일 파일에서 검색
grep "search_text" file.txt

# 여러 파일에서 검색
grep "search_text" *.txt

# 재귀적으로 검색
grep -r "search_text" /path/to/dir

# 대소문자 구분 없이
grep -i "search_text" file.txt

유용한 옵션

# 파일 이름만 출력
grep -l "search_text" *.txt

# 파일 이름과 줄 번호
grep -n "search_text" file.txt

# 매칭되지 않는 줄
grep -v "search_text" file.txt

# 단어 단위로 매칭
grep -w "word" file.txt

# 앞뒤 줄 포함 (컨텍스트)
grep -A 3 -B 3 "search_text" file.txt # 앞뒤 3줄
grep -C 3 "search_text" file.txt # 같은 의미

# 색상 강조
grep --color=auto "search_text" file.txt

정규 표현식

# 기본 정규식
grep "^start" file.txt # 줄 시작
grep "end$" file.txt # 줄 끝
grep "test.*text" file.txt # 패턴 매칭

# 확장 정규식
grep -E "pattern1|pattern2" file.txt
grep -E "[0-9]{3}-[0-9]{4}" file.txt

# Perl 정규식
grep -P "\d{3}-\d{4}" file.txt

실용 예시

# 에러 로그 찾기
grep -r "ERROR" /var/log/

# IP 주소 찾기
grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" file.txt

# 특정 확장자에서만 검색
grep -r --include="*.py" "def function_name" .

# 특정 확장자 제외
grep -r --exclude="*.min.js" "search_text" .

# 특정 디렉토리 제외
grep -r --exclude-dir=node_modules "search_text" .

4. which - 실행 파일 경로 찾기

PATH에 있는 실행 파일의 위치를 찾습니다.

# 명령어 위치 찾기
which python
which java
which node

# 모든 매칭 경로
which -a python

5. whereis - 바이너리, 소스, 매뉴얼 찾기

# 전체 정보
whereis python

# 바이너리만
whereis -b python

# 매뉴얼만
whereis -m python

# 소스만
whereis -s python

6. type - 명령어 타입 확인

# 명령어가 무엇인지 확인
type ls # ls is aliased to `ls --color=auto'
type cd # cd is a shell builtin
type python # python is /usr/bin/python

# 모든 정보
type -a python

7. fd - 현대적인 find 대안

더 빠르고 사용하기 쉬운 find의 대안입니다.

# fd 설치
sudo apt install fd-find # Ubuntu/Debian
brew install fd # macOS

# 기본 사용
fd pattern

# 파일 타입 지정
fd -t f pattern # 파일만
fd -t d pattern # 디렉토리만

# 숨김 파일 포함
fd -H pattern

# 전체 경로 검색
fd -p path/pattern

# 확장자로 검색
fd -e txt
fd -e log -e txt

# 제외 패턴
fd -E node_modules pattern

8. ripgrep (rg) - 빠른 grep 대안

매우 빠른 코드 검색 도구입니다.

# ripgrep 설치
sudo apt install ripgrep # Ubuntu/Debian
brew install ripgrep # macOS

# 기본 사용
rg "search_text"

# 특정 타입만
rg -t py "def " # Python 파일만
rg -t js "function" # JavaScript 파일만

# 대소문자 구분 없이
rg -i "search_text"

# 숨김 파일 포함
rg --hidden "search_text"

# 특정 디렉토리 제외
rg "search_text" -g '!node_modules'

# 파일 이름만
rg -l "search_text"

# 통계 정보
rg --stats "search_text"

9. tree - 디렉토리 구조 시각화

# tree 설치
sudo apt install tree

# 기본 사용
tree

# 레벨 제한
tree -L 2

# 디렉토리만
tree -d

# 숨김 파일 포함
tree -a

# 패턴 매칭
tree -P "*.txt"

# 특정 패턴 제외
tree -I "node_modules|.git"

# 크기 표시
tree -h

10. 실전 활용 스크립트

대용량 파일 찾기

#!/bin/bash
# 1GB 이상 파일을 크기순으로 정렬
find . -type f -size +1G -exec ls -lh {} \; | awk '{print $5, $9}' | sort -hr

오래된 로그 파일 정리

#!/bin/bash
# 30일 이상된 .log 파일 삭제
find /var/log -name "*.log" -type f -mtime +30 -delete

특정 텍스트를 포함한 파일 찾기

#!/bin/bash
# ERROR를 포함한 로그 파일 찾기
grep -r "ERROR" /var/log --include="*.log" -l

중복 파일 찾기 (md5 해시 기반)

#!/bin/bash
# 현재 디렉토리에서 중복 파일 찾기
find . -type f -exec md5sum {} \; | sort | uniq -w32 -dD

최근 수정된 파일 모니터링

#!/bin/bash
# 최근 5분 이내 수정된 파일
find /path/to/watch -type f -mmin -5

성능 비교

도구 속도 용도 설치 필요
find 보통 범용적인 파일 검색 기본 설치
locate 매우 빠름 파일명 검색 필요
grep 보통 파일 내용 검색 기본 설치
fd 빠름 현대적인 파일 검색 필요
rg 매우 빠름 코드 검색 필요

정리

  • 파일명으로 찾기: find, locate, fd
  • 파일 내용으로 찾기: grep, rg
  • 실행 파일 찾기: which, whereis, type
  • 대용량 검색: locate (사전 인덱싱) 또는 fd, rg (빠른 성능)
  • 정확한 제어: find (가장 강력한 옵션)

일반적으로 **find**와 **grep**을 조합하면 대부분의 검색 작업을 수행할 수 있습니다. 성능이 중요하다면 **fd**와 **rg**를 설치하여 사용하는 것을 추천합니다.

Share