Published 2020. 12. 13. 23:11
728x90
반응형

find 명령어

리눅스에서 파일 또는 디렉토리를 검색할 때 사용하는 명령어다.
find 명령어의 다양한 옵션을 통해서 다양한 방식으로 검색을 할 수 있다.

find [option] [-f path] path ... [expression]

[option]
-P: 심볼릭 링크를 따라가지 않고, 심볼릭 링크 자체 정보 사용
-L: 심볼릭 링크에 연결된 파일 정보 사용
-H: 심볼릭 링크를 따라가지 않으나, Command Line Argument를 처리할 때 예외
-D: 디버그 메시지 출력

[expression]
-name: 지정된 문자열 패턴에 해당하는 파일 검색
-empty: 빈 디렉토리 또는 크기가 0인 파일 검색
-delete: 검색된 파일 또는 디렉토리 삭제
-exec: 검색된 파일에 대해 지정된 명령 실행
-path: 지정된 문자열 패턴에 해당하는 경로에서 검색
-print: 검색 결과를 출력. 검색 항목은 newline 으로 구분 (기본값)
-print0: 검색 결과를 출력. 검색 항복은 null로 구분
-size: 파일 크기를 사용하여 파일 검색
-type: 지정된 파일 타입에 해당하는 파일 검색
-mindepth: 검색을 시작할 하위 디렉토리의 최소 깊이 지정
-maxdepth: 검색할 하위 디렉토리의 최대 깊이 지정
-atime: 파일 접근 시각을 기준으로 파일 검색 (access time)
-ctime: 파일 내용 및 속성 변경 시각을 기준으로 파일 검색 (change time)
-mtime: 파일 데이터 수정 시각을 기준으로 파일 검색 (modify time)

위와 같이 find 명령어에 대한 설명이 되어 있다.


find 명령어 사용해보기

다양한 사용법이 있지만 내가 자주 사용해봤던 내용들에 한해서 예를 들어 보았다.
참고 사이트에 적어놓은 너무 잘 설명되어있는 블로그에 들어가면 find 명령어에 대한 다양한 예를 확인해볼 수 있다.

현재 디렉토리에 있는 디렉토리 및 파일 리스트 출력

// 현재 디렉토리에 있는 디렉토리 및 파일 리스트 출력

# find
.
./dir3
./dir5
./dir2
./dir2/one_file
./dir2/three_file
./dir2/two_file
./dir4
./dir1
./dir1/dir3
./dir1/dir2
./dir1/dir1
./dir1/dir1/file1
./dir1/dir1/file2
./dir1/dir1/file3

현재 디렉토리에 포함된 모든 하위 디렉토리 및 파일에서 특정 문자열을 이용한 파일 검색

// 현재 디렉토리(.) 경로에서 'file' 문자열로 시작하는 파일 검색

# find . -name "file*"
./dir1/dir1/file1
./dir1/dir1/file2
./dir1/dir1/file3

// 현재 디렉토리(.) 경로에서 'file' 문자열이 포함된 파일 검색
# find . -name "*file*"
./dir2/one_file
./dir2/three_file
./dir2/two_file
./dir1/dir1/file1
./dir1/dir1/file2
./dir1/dir1/file3

// 현재 디렉토리(.) 경로에서 'txt' 인 파일 확장자 파일 검색
# find . -name "*.txt"
./dir3/three.txt
./dir3/one.txt
./dir3/two.txt

파일 또는 디렉토리 검색 후 삭제하기
-delete 표현식을 사용해서 검색된 파일 또는 디렉토리를 삭제할 수 있다.
디렉토리의 경우 비어있지 않으면 삭제 되지 않는다.

// 특정 파일 검색 후 삭제
# ls -rlt dir3
total 0
-rw-r--r-- 1 root root 0 Dec 13 11:14 one.txt
-rw-r--r-- 1 root root 0 Dec 13 11:14 two.txt
-rw-r--r-- 1 root root 0 Dec 13 11:14 three.txt

# find . -name "one.txt" -delete

# ls -rlt dir3
total 0
-rw-r--r-- 1 root root 0 Dec 13 11:14 two.txt
-rw-r--r-- 1 root root 0 Dec 13 11:14 three.txt

// 비어있는 디렉토리 검색 후 삭제
# ls
dir1  dir2  dir3  dir4

# ls -rlt dir4
total 0

# find . -name "dir4" -delete

# ls -rlt dir4
ls: cannot access 'dir4': No such file or directory

# ls
dir1  dir2  dir3

// 디렉토리의 경우 비어있지 않으면 삭제 되지 않는다.
# find . -name "dir1" -delete
find: cannot delete './dir1': Directory not empty

검색된 파일에 대한 상세 정보 출력
검색된 결과를 사용해 다른 명령을 실행할 수 있게 해준다.

// dir1 이란 디렉토리를 검색한 후 디렉토리 리스트를 출력
# find . -name "dir1" -exec ls -l {} \;
total 0
-rw-r--r-- 1 root root 0 Dec 13 11:13 file1
-rw-r--r-- 1 root root 0 Dec 13 11:13 file2
-rw-r--r-- 1 root root 0 Dec 13 11:13 file3

지정 날짜 이전에 생성된 파일 검색
예를 들어 생성한 후 1년이 지난 파일을 검색하는 등 일정 시간이 지난 파일 또는 디렉토리를 검색할 수 있다.

// 파일이 생성된 날짜 확인
# ls -rlt
total 0
-rw-r--r-- 1 root root 0 Oct 20  2019 text3.txt
-rw-r--r-- 1 root root 0 Jan 20  2020 text1.txt
-rw-r--r-- 1 root root 0 Apr 20  2020 text2.txt

// 생성된 후 1년(365일)이 지난 파일 또는 디렉토리 검색
# find . -mtime +365
./text3.txt

파일 타입을 지정하여 검색
일반 파일, 심볼릭 링크 파일, 디렉토리 등 파일의 종류가 다양하다.
그래서 -type 명령어를 사용하여 원하는 타입의 파일을 검색할 수 있다.

# ls -rlt
total 0
-rw-r--r-- 1 root root  0 Dec 13 14:07 regular_file.txt
-rw-r--r-- 1 root root  0 Dec 13 14:07 symbolic_file
lrwxrwxrwx 1 root root 13 Dec 13 14:09 symbolic.txt -> symbolic_file

// 심볼릭 링크 타입의 파일 검색
# find . -type l
./symbolic.txt

// 일반 파일 타입의 파일 검색
# find . -type f
./regular_file.txt
./symbolic_file

 

- 참고 사이트 - 

정말 find 명령어에 대해 잘 정리해둔 글이 있어 참고한다.

recipes4dev.tistory.com/156

 

리눅스 find 명령어 사용법. (Linux find command) - 리눅스 파일 검색.

1. find 명령어. find는 리눅스에서 파일 및 디렉토리를 검색할 때 사용하는 명령입니다. 이름 그대로 리눅스에서 접근할 수 있는 파일 시스템에서, 파일 및 디렉토리를 "찾는(find)" 것이죠. 그런데

recipes4dev.tistory.com

 

728x90
반응형

'리눅스 > Command' 카테고리의 다른 글

리눅스 sed 명령어로 특정 문자가 포함된 라인부터 출력하기  (2) 2021.08.22
리눅스 grep 명령어  (0) 2021.06.08
리눅스 uniq 명령어  (0) 2020.11.09
리눅스 sort 명령어  (2) 2020.11.04
리눅스 lsof 명령어  (0) 2019.10.03
복사했습니다!