CS/Linux

[Linux] 파일 위치 검색

kyoulho 2024. 9. 22. 16:06

find 명령어 기본 구조

find [경로] [옵션] [조건] [액션]
  • 경로: 검색을 시작할 디렉토리 경로. 예를 들어 /home/user.
  • 옵션: 검색 방식을 조정하는 옵션들.
    • -type: 파일의 유형을 지정한다. 예: f (파일), d (디렉토리), l (심볼릭 링크) 등.
    • -name: 파일 이름을 기준으로 검색한다. 와일드카드(*, ?)를 사용할 수 있다.
    • -user: 특정 사용자가 소유한 파일을 검색한다.
    • -newer: 지정한 파일보다 최근에 수정된 파일을 검색한다.
    • -perm: 특정 권한을 가진 파일을 검색한다.
    • -size: 파일 크기를 기준으로 검색한다. 예: +100M (100MB 이상), -50k (50KB 이하) 등.
    • -mtime: 파일의 마지막 수정 시간을 기준으로 검색한다. 예: +30 (30일 이상), -7 (7일 이내) 등.
    • -iname: 대소문자를 구분하지 않고 파일 이름을 검색한다.
    • -regex: 정규 표현식을 사용하여 파일을 검색한다.
  • 조건: 파일의 속성이나 이름 등을 기준으로 설정. 예: 파일 이름, 크기, 수정 시간 등.
  • 액션: 검색된 파일에 대해 수행할 작업.
    • -print: 검색된 파일의 경로를 출력한다. 기본 액션.
    • -exec: 검색된 파일에 대해 지정한 명령어를 실행한다.
    • -delete: 검색된 파일을 삭제한다.
    • -ls: 검색된 파일의 상세 정보를 출력한다.
    • -ok: -exec와 유사하지만, 각 명령어 실행 전에 사용자에게 확인을 요청한다.

기본 파일 찾기 예제

특정 이름의 파일 찾기:
/home/user 디렉토리 내에서 filename.txt라는 이름의 파일을 검색한다.

find /home/user -name "filename.txt"

특정 확장자의 파일 찾기:
/var/log 디렉토리 내에서 .log 확장자를 가진 모든 파일을 검색한다.

find /var/log -type f -name "*.log"

크기가 특정 값 이상인 파일 찾기:
/home/user 디렉토리 내에서 크기가 100MB 이상인 파일을 검색한다.

find /home/user -type f -size +100M

수정된 지 일정 기간이 지난 파일 찾기:
/tmp 디렉토리 내에서 마지막 수정 시간이 30일 이상 지난 파일을 검색한다.

find /tmp -type f -mtime +30

특정 사용자 소유의 파일 찾기:
/var/www 디렉토리 내에서 www-data 사용자가 소유한 파일을 검색한다.

find /var/www -type f -user www-data

특정 권한을 가진 파일 찾기:
/etc 디렉토리 내에서 권한이 644인 파일을 검색한다.

find /etc -type f -perm 644

find 명령어 활용 예제

검색된 파일 목록 출력:
/etc 디렉토리 내에서 .conf 파일을 찾아 출력한다.

find /etc -type f -name "*.conf" -print

검색된 파일 삭제하기:
/tmp 디렉토리 내에서 .tmp 파일을 찾아 삭제한다.

find /tmp -type f -name "*.tmp" -exec rm {} \;

검색된 파일의 소유자 변경하기:
/var/www 디렉토리 내에서 .html 파일의 소유자를 www-data로 변경한다.

find /var/www -type f -name "*.html" -exec chown www-data:www-data {} \;

검색된 파일의 권한 변경하기:
/home/user 디렉토리 내에서 .sh 파일의 권한을 755로 변경한다.

find /home/user -type f -name "*.sh" -exec chmod 755 {} \;

최근에 수정된 파일을 다른 디렉토리로 복사하기:
/var/log 디렉토리 내에서 지난 7일간 수정된 .log 파일을 /backup/logs로 복사한다.

find /var/log -type f -name "*.log" -mtime -7 -exec cp {} /backup/logs/ \;

정규 표현식을 사용한 파일 검색:
/usr/local 디렉토리 내에서 숫자로 시작하는 파일 이름을 가진 파일을 검색한다.

find /usr/local -type f -regex ".*/[0-9].*"

확장자를 대소문자 구분 없이 검색하기:
/var/www 디렉토리 내에서 .HTML 또는 .html 확장자를 가진 파일을 검색한다.

find /var/www -type f -iname "*.html"

디렉토리 검색하기:
/home/user 디렉토리 내에서 이름에 backup이 포함된 디렉토리를 검색한다.

find /home/user -type d -name "*backup*"

심볼릭 링크 검색하기:
/usr 디렉토리 내에서 심볼릭 링크인 파일을 검색한다.

find /usr -type l

여러 조건을 조합하여 검색하기:
/var 디렉토리 내에서 .log 확장자를 가진 파일 중 크기가 10MB 이상이고, root 사용자가 소유한 파일을 검색한다.

find /var -type f -name "*.log" -size +10M -user root

검색된 파일의 상세 정보 출력하기:
/etc 디렉토리 내에서 .conf 파일을 찾아 상세 정보를 출력한다.

find /etc -type f -name "*.conf" -ls

명령어 실행 전에 사용자 확인 요청하기:
/tmp 디렉토리 내에서 .tmp 파일을 찾아 삭제하기 전에 확인을 요청한다.

find /tmp -type f -name "*.tmp" -ok rm {} \;

하위 디렉토리를 제외하고 검색하기:
/home/user 디렉토리 내에서 최상위 디렉토리만 검색하고 하위 디렉토리는 제외한다.

find /home/user -maxdepth 1 -type f

특정 그룹 소유의 파일 찾기:
/var/www 디렉토리 내에서 www-data 그룹이 소유한 파일을 검색한다.

find /var/www -type f -group www-data

빈 파일 검색하기:
/var/log 디렉토리 내에서 크기가 0인 빈 파일을 검색한다.

find /var/log -type f -empty

심볼릭 링크를 따라 검색하기:
/usr 디렉토리 내에서 심볼릭 링크를 따라 실제 파일을 검색한다.

find /usr -L -type f

파일의 접근 시간을 기준으로 검색하기:
/home/user 디렉토리 내에서 지난 15일간 접근하지 않은 파일을 검색한다.

find /home/user -type f -atime +15

디렉토리 생성 시간을 기준으로 검색하기:
/var 디렉토리 내에서 최근에 생성된 디렉토리를 검색한다.

find /var -type d -ctime -7

파일 이름에 특정 문자열이 포함된 파일 검색하기:
/home/user 디렉토리 내에서 파일 이름에 report가 포함된 파일을 검색한다.

find /home/user -type f -name "*report*"

파일의 크기를 바이트 단위로 검색하기:
/home/user 디렉토리 내에서 크기가 정확히 2048바이트인 파일을 검색한다.

find /home/user -type f -size 2048c

심볼릭 링크를 제외하고 검색하기:
/usr/local 디렉토리 내에서 심볼릭 링크가 아닌 실제 파일만 검색한다.

find /usr/local -type f ! -type l

여러 액션을 한 번에 수행하기:
/var/log 디렉토리 내에서 .log 파일을 찾아 삭제하고, 삭제된 파일의 이름을 로그 파일에 기록한다.

find /var/log -type f -name "*.log" -exec rm {} \; -exec echo "Deleted: {}" >> deleted_logs.txt \;

추가 팁 및 활용 방법

-prune 옵션을 사용하여 특정 디렉토리 제외하기:
특정 디렉토리를 검색에서 제외하고 싶을 때 사용한다. 예를 들어, /home/user 디렉토리 내에서 node_modules 디렉토리를 제외하고 검색한다.

find /home/user -path "/home/user/node_modules" -prune -o -type f -name "*.js" -print

xargs와 함께 사용하여 성능 향상하기:
많은 파일에 대해 명령어를 실행할 때 xargs와 함께 사용하면 성능을 향상시킬 수 있다.

find /var/log -type f -name "*.log" | xargs grep "ERROR"

병렬로 명령어 실행하기:
GNU findxargs-P 옵션을 사용하여 병렬로 명령어를 실행할 수 있다.

find /var/log -type f -name "*.log" | xargs -P 4 -I {} grep "ERROR" {}

환경 변수와 함께 사용하기:
검색된 파일의 경로를 환경 변수에 저장하여 후속 작업에 사용할 수 있다.

FILES=$(find /home/user -type f -name "*.txt") echo "$FILES"

특정 시간 범위 내에서 파일 검색하기:
파일의 수정 시간이 특정 범위 내에 있는 파일을 검색할 수 있다. 예를 들어, 지난 7일에서 30일 사이에 수정된 파일을 검색한다.

find /home/user -type f -mtime +7 -mtime -30

다양한 조건 결합하기:
-and, -or 등의 논리 연산자를 사용하여 복잡한 조건을 결합할 수 있다.

find /var/www \( -name "*.html" -or -name "*.css" \) -type f

파일 시스템 유형 지정하기:
특정 파일 시스템 유형의 파일만 검색할 수 있다. 예를 들어, ext4 파일 시스템의 파일을 검색한다.

find / -xdev -type f

심볼릭 링크의 대상 파일 검색하기:
심볼릭 링크가 가리키는 대상 파일을 검색할 수 있다.

find /usr/local -type l -exec ls -l {} \;

파일의 변경 권한을 기준으로 검색하기:
파일의 권한이 특정 값보다 높은 파일을 검색할 수 있다.

find /home/user -type f -perm /u+x
728x90

'CS > Linux' 카테고리의 다른 글

[Linux] 주요 네트워크 명령어 및 설정 파일  (0) 2024.09.27
[Linux] CRON과 AT  (0) 2024.09.22
[Linux] 파일의 압축과 묶기  (1) 2024.09.22
[Linux] 패키지 관리자  (1) 2024.09.22
[Linux] 하드 링크와 심볼릭 링크  (1) 2024.09.20