[Linux] find 명령어로 파일 / 디렉토리 검색하기

2021. 11. 12. 23:32·DevOps/Linux
반응형

이번 포스트에서는 find 명령어로 파일을 검색하는 방법을 정리하겠습니다.

find 명령어 

find 명령어를 이용하면 파일 혹은 디렉토리를 검색할 수 있습니다.

$ find [옵션(options)] [경로(path)] [표현식(expression)]

find 명령어의 옵션(options)

-P -> Symbolic link일 경우 따라가지 않습니다. default 설정입니다.

-L -> Symbolic link를 따라가지 않습니다.

-H -> command line argumnets(명령줄 인수)를 처리할때를 제외하고 Symbolic link를 따라가지 않습니다.

find 명령어의 표현식(expressions)

Test Expressions

Test Expressions는 특정 조건에 맞는 파일들은 선별하기 위해서 사용하며 사용하는 표현식이며 옵션들은 아래와 같습니다.

 

-atime n -> 파일이 마지막으로 액세스 된 시간을 기준으로 검색합니다. n시간(hour) 이내에 파일에 액세스 된 시간을 의미합니다.

-amin n -> 파일이 마지막으로 액세스 된 시간을 기준으로 검색합니다. n분(minute) 이내에 파일에 액세스 된 시간을 의미합니다.

-ctime n -> 파일이 마지막으로 변경 된 시간을 기준으로 검색합니다. n시간(hour) 이내에 파일이 변경 된 시간을 의미합니다.

-cmin n -> 파일이 마지막으로 변경 된 시간을 기준으로 검색합니다. n분(minute) 이내에 파일이 변경 된 시간을 의미합니다.

-empty -> 내용이 비어있는 빈 파일이거나 빈 디렉토리를 검색합니다.

-perm mode -> 파일의 권한 8진수로 검색합니다.

-type c -> 파일의 타입으로 검색하며 타입의 종류는 아래와 같습니다.

b: 블록파일

c: 문자

d: 디렉토리 

p: 파이프 (FIFO) 

f: 파일

l: 심볼릭 링크

s: 소켓

-size [+, -]n -> 파일의 사이즈로 검색합니다. +는 n크기 이상의 파일, -는 n크기 이하의 파일을 의미하며 n에 들어가는 사이즈 옵션은 아래와 같습니다.

b: for 512 bytes block

c: for byte

w: for two-byte words

k: for Kilobytes (units of 1024 bytes)

M: for Megabytes (units of 1048576 bytes)

G: for Gigabytes (units of 1073741824 bytes)

Actions Expressions

Actions Expressions는 찾은 파일에 대해서 액션을 수행합니다. default로는 -print가 수행되며 옵션들은 아래와 같습니다.

 

-delete -> 파일을 삭제합니다.

-exec command {} \; -> 검색한 파일에 대해서 지정된 command의 명령을 수행합니다. {} 안에 검색된 파일이 들어갑니다.

-print -> 파일이름을 regex 패턴으로 검색합니다.

find 명령어 예시

파일 이름(-name)으로 검색하기

* 와일드카드 이용하기

* 와일드카드는 글자수에 상관없이 모든 글자 라는 의미를 가지고 있습니다.

# 현재 디렉토리에서 a로 시작하는 모든 파일을 검색.
$ find . -name 'a*'

# 현재 디렉토리에서 b로 끝나는 모든 파일을 검색.
$ find . -name '*b'

# 현재 디렉토리에서 a로 시작하고 b로 끝나는 모든 파일을 검색.
$ find . -name 'a*b'


# 현재 디렉토리에서 .txt로 끝나는 모든 파일을 검색.
$ find . -name '*.txt'

# 현재 디렉토리에서 jpg, jpeg 등등 jp가 들어간 이미지 확장자 파일들을 검색.
$ find . -name '*.jp*'

? 와일드카드 이용하기

? 와일드카드는 모든 한글자 라는 의미를 가지고 있습니다.

# 현재 디렉토리에서 중간에 a가 들어간 5글자의 파일을 검색.
$ find . -name '??a??'

# 현재 디렉토리에서 ab로 시작하는 3글자 파일을 검색. ex) abc, abd, abe ...
$ find . -name 'ab?'

# 현재 디렉토리에서 abc.으로 시작하고 3가지 글자로 끝나는 파일을 검색. ex) abc.jpg, abc.txt, abc.png .....
$ find . -name 'abc.???'

[] 와일드카드 이용하기

[] 와일드카드는 []안에 들어있는 각각의 모든 한글자를 의미합니다.

# a b c . , 중에 한 글자의 파일을 검색.
$ find . -name '[abc.,]'

# acd ace bcd bce 에 포함되는 파일을 검색. 즉, [ab]의 의미는 a, b중에 한 글자를 의미하는 것입니다.
$ find . -name '[ab]c[de]'

# ab, bb, cb, db, eb, fb ... 에 포함되는 파일을 검색.
$ find . -name '[*]b'

파일 size(-size)로 검색하기

# 현재 디렉토리에서 크기가 1024byte인 파일 검색.
$ find . -size 1024c

# 현재 디렉토리에서 1024byte보다 크기가 큰 파일 검색.
$ find . -size +1024c

# 현재 디렉토리에서 1024byte보다 크기가 작은 파일 검색.
$ find . -size -1024c

# 현재 디렉토리에서 1MB보다 크고 512MB보다 작은 파일 검색.
$ find . -size +1M -size -512M

# 현재 디렉토리에서 빈 디렉토리 혹은 파일 크기가 0인 파일을 검색.
$ find . -empty

# 현재 디렉토리에서 빈 디렉토리이거나 크기가 0인 파일 검색하여 삭제.
$ find . -name '*' -empty -delete

검색한 파일에 대해서 추가 명령어(-exec) 실행하기

# 현재 디렉토리에 _images로 끝나는 모든 파일을 찾아서 상세정보 출력
$ find . -name '*_images' -exec ls -l {} \;

# 현재 디렉토리에 있는 파일 중에 파일 내용에 abcd라는 내용이 들어가있는 파일들 찾기 
$ find . -type f -exec grep 'abcd' {} \;

# 현재 디렉토리에 있는 .apk로 끝나는 파일 모두 삭제
$ find . -name '*.apk' -exec rm -f {} \;

References

https://linux.die.net/man/1/find

 

find(1) - Linux man page

find(1) - Linux man page Name find - search for files in a directory hierarchy Synopsis find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] Description This manual page documents the GNU version of find. GNU find searches the directory tree

linux.die.net

https://mamu2830.blogspot.com/2019/12/find.html

 

리눅스 find 매우 자세히!

리눅스 find 명령어, 와일드카드, 따옴표, 중괄호, 이스케이프, 세미콜론에 대해 자세히 알려주는 포스트입니다.

mamu2830.blogspot.com

반응형
'DevOps/Linux' 카테고리의 다른 글
  • [Linux] mv 명령어로 파일/디렉토리 이동하기
  • [Linux] 명령어 cd와 파일경로(절대경로, 상대경로)
  • [Linux] 리눅스 쉘(Shell)의 이해
seunghwaan
seunghwaan
공부한 내용을 정리하는 개발 기록 블로그
    반응형
  • seunghwaan
    SH's Devlog
    seunghwaan
  • 전체
    오늘
    어제
    • 분류 전체보기 (150)
      • Android (62)
        • Basic (17)
        • Kotlin(Java) (14)
        • UI & Animation (1)
        • Compose (2)
        • Coroutines (1)
        • Dependency Injection (6)
        • RxJava (8)
        • BLE (3)
        • TDD (2)
        • JetPack (1)
        • NextStep (4)
        • Error Log (3)
      • Flutter (14)
        • Basic (5)
        • Dart (1)
        • State Management (2)
        • Widgets (4)
        • Error and Tips (2)
      • iOS (8)
        • Basic (0)
        • Swift (8)
      • Web Frontend (6)
        • Basic (0)
        • JavaScript (5)
        • TypeScript (0)
        • React (1)
      • CS(Computer Science) (18)
        • Network (4)
        • Database (10)
        • Design Pattern (1)
        • Computer Architecture (3)
        • Operating System (0)
      • Cloud (6)
        • AWS (6)
      • DevOps (25)
        • GIT (4)
        • CI CD (8)
        • Linux (4)
        • Docker (9)
        • Error Log (0)
      • 코딩테스트 (10)
        • DB (6)
        • 알고리즘 (4)
      • Backend (1)
        • Spring (1)
      • Mac Tip (0)
      • Language (0)
        • English (0)
        • Japanese (0)
      • Temporary (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    FLUTTER
    error
    Computer Science
    AWS
    CICD
    Jenkins
    CI
    Dependency Injection
    BLE
    Linux
    cs
    docker
    컴퓨터공학
    cognito
    gradle
    상태 관리
    Android
    JavaScript
    MySQL
    Network
    Kotlin
    네트워크
    Swift
    Algorithm
    시작하세요! 도커
    Dagger
    RxJava
    IOS
    di
    database
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
seunghwaan
[Linux] find 명령어로 파일 / 디렉토리 검색하기
상단으로

티스토리툴바