Post

Linux - find 명령어 정리

Linux에서 파일 또는 디렉토리를 찾아볼 수 있는 find에 대해서 정리해 보았다.

Linux - find 명령어 정리

대부분의 Linux 배포판

Host

CLI

명령어


[기본 사용법]

1
find '<search_path>' [options]

1. 특정 파일명을 찾는 경우

[기본 사용법]

1
find '<search_path>' -name '<file_name>'

[예시]

현재 디렉토리에서 txt 파일을 모두 찾으려는 경우

1
find . -name *.txt

tmp 디렉토리 안에서 이름이 “1” 인 모든 확장자를 찾아 내려하는 경우

1
find /tmp -name 1.*

2. 특정 디렉토리를 찾는 하는 경우

[기본 사용법]

1
find '<search_path>' -type d -name '<directory_name>'

[예시]

/ 에서 test 디렉토리를 찾는 경우

1
find / -type d -name test

현재 디렉토리에서 tar이 포함되는 디렉토리를 찾는 경우

1
find . -type d -name *tar*

3. 특정 권한을 가진 파일을 찾는 경우

[기본 사용법]

1
find '<search_path>' -perm '<permission_num>' -name '<file_name>'

여기에서 <permission_num>은 Linux에서 기본적으로 파일이나 디렉토리에 대해 10자의 Permission 기호로 이뤄진 번호다.

예를들어 -rwx—r-x 가 있다고 가정했을때 이것을 네 분류로 나눠서 보면 된다.

  • 처음 파일을 의미,d디렉토리를 의미
  • 두번째 rwx 소유자(Owner)를 의미
  • 세번째 그룹(Group) 사용자를 의미
  • 마지막 r-x 기타(Other) 사용자를 의미

r Read(읽기)의 약자 / w Write(쓰기)의 약자 / x Execute(실행)의 약자

그리고 이것들을 숫자로 표현하게 된다면, r = 4 / w = 2 / x = 1 로 표현된다. 총합은 7이며 7은 즉 모든 권한이다.

[예시]

현재 디렉토리에서 777(모든 권한)을 가지며 txt 파일을 모두 찾는 경우

1
find . -perm 777 -name *.txt

4. 특정 소유자의 파일을 찾는 경우

[기본 사용법]

1
find '<search_path>' -user '<user_name>' -name '<file_name>'

[예시]

tmp 디렉토리에서 root 소유자인 txt 파일을 모두 찾는 경우

1
find /tmp -user root -name *.txt

5. 특정 그룹의 파일을 찾는 경우

[기본 사용법]

1
find '<search_path>' -group '<group_name>' -name '<file_name>'

[예시]

root 디렉토리에서 web 그룹 소유권이 있는 파일을 찾는 경우

1
find / -group web

현재 디렉토리에서 web 그룹에게 소유권이 있는 test.txt 파일을 찾는 경우

1
find . -group web -name test.txt

6. 특정 용량 기준으로 파일을 찾는 경우

[기본 사용법]

1
find '<search_path>' -size '<capacity>' -name '<file_name>'

<capacity>에는 다음과 같은 용량이 사용 가능 함

  • C byte
  • k kilobyte
  • M megabyte
  • G gigabyte

[예시]

현재 디렉토리에서 2M 이상 되는 파일을 찾는 경우

1
find . -size +2M

tmp 디렉토리에서 용량이 2k 이상 4k 미만이 되는 파일을 찾는 경우

1
find ./tmp/ -size +2k -size 4k

7. 특정 시간 기준으로 파일을 찾는 경우

[기본 사용법]

1
2
3
find '<search_path>' -atime '<time_set>' -name '<file_name>'
find '<search_path>' -mtime '<time_set>' -name '<file_name>'
find '<search_path>' -ctime '<time_set>' -name '<file_name>'

<time_set>은 Linux 시간 표기법 의해 세 가지로 구분이 된다.

  • atime (Access Time) 마지막으로 파일에 접근한 시간, vi 및 cat 등의 명령어로 열람한 시간들이 이에 해당 됨
  • mtime (Modification Time) 마지막으로 파일의 내용을 수정한 시간
  • ctime (Change time) chmod 나 chown 등 파일의 속성 및 권한을 변경한 시간

일반적으로 쓰이는 ls 의 명령어에서 보이는 시간은 mtime
ctimels -lc 의 명령어로 확인
atimels -lu 의 명령어로 확인

[예시]

사용자 홈 디렉토리에서 마지막으로 수정한지 2달 이상 된 모든 파일을 찾는 경우

1
find ~/ -mtime +60

사용자 홈 디렉토리에서 마지막으로 수정한지 4달 이상 된 txt 파일을 찾는 경우

1
find ~/ -mtime +120 -name *.txt

etc 디렉토리에서 파일의 속성을 변경한지 1달 이상 된 모든 파일을 찾는 경우

1
find /etc -ctime +30

사용 사례


1. find로 해당 파일, 디렉토리를 찾은 후 -exec를 통한 실행 권한

[기본 사용법]

1
find '<search_path>' -exec '<exe_command' {} \;

{}: find로 찾은 파일, 디렉토리를 의미
\;: -exec의 옵션의 내용 끝을 의미

[예시]

/src에 있는 1234.txt 파일을 찾아서 이 텍스트 파일의 내용을 /src의 위치에 5678.txt 파일로 생성 시킬 때

1
find /src -name 1234.txt -exec cat {} > /usr/local/src/5678.txt \;
This post is licensed under CC BY 4.0 by the author.