오늘은 Linux 시스템에서 파일/디렉터리를 검색할 때 사용하는 find 명령어 사용법을 정리해 본다.
#1. find 란?
find명령어는 "이름 그대로 리눅스에서 접근할 수 있는 파일 시스템에 파일/디렉터리를 찾는(find) 명령어"이다.
어느 OS나 마찬가지지만, 리눅스 파일 시스템은 구조가 아주 복잡하다. 이 중에는, 비슷한 이름의 파일과 동일한 확장자를 가진 파일, 그리고 종류가 다양한 파일들이 존재한다. 복잡한 구조에서 원하는 파일을 가능한 정확히 찾을 수 있도록, find 명령에는 다양한 옵션이 존재한다.
자, 그럼 find 명령의 기본적인 사용법을 살펴보고, 다양한 옵션을 통해 우리가 찾는 파일/디렉터리를 신속/정확하게 검색하는 방법에 대해 알아보자.
#2. find 명령어 사용법
사용법 : find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]기본 경로는 현재 디렉토리입니다. 기본 표현식은 -print입니다.표현식은 연산자, 옵션, 테스트 및 조치로 구성 될 수 있습니다.연산자 (우선 순위 감소,-다른 항목이 지정되지 않은 경우 암시 적) : (EXPR)! EXPR-EXPR EXPR1 아님 -a EXPR2 EXPR1-및 EXPR2 EXPR1 -o EXPR2 EXPR1-또는 EXPR2 EXPR1, EXPR2위치 옵션 (항상 참) : -daystart -follow -regextype일반 옵션 (항상 true, 다른 표현식 앞에 지정됨) : -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xautofs -xdev -ignore_readdir_race -noignore_readdir_race테스트 (N은 +N, -N, N 일 수 있음) : -amin N -anewer FILE -atime N -cmin N -cnewer 파일 -ctime N -empty -false -fstype TYPE -gid N-그룹 이름 -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex 패턴 -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE -nouser -nogroup -path PATTERN -perm [-/] MODE -regex PATTERN -읽기 가능-쓰기 가능-실행 가능 -wholename PATTERN -size N [bcwkMG] -true -type [bcdpflsD] -uid N -used N -user NAME -xtype [bcdpfls] -컨텍스트 CONTEXT작업 : -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print -fprint0 파일 -fprint 파일 -ls -fls 파일 -prune -quit -exec COMMAND; -exec COMMAND {} + -ok COMMAND; -execdir COMMAND; -execdir COMMAND {} + -okdir COMMAND;
find [옵션] [경로] [표현식]옵션 :-H심볼릭 링크를 따라가지 않고, Command Line Argument를 처리할때 예외.-L심볼릭 링크에 연결된 파일정보 사용.-P심볼릭 링크를 따라가지 않고, 링크 자체 정보를 사용-Olevel쿼리 최적화를 활성화한다. level : 0-3-D [옵션]디버깅 기능 사용. help디버깅 옵션을 설명.exec-exec, -execdir, -ok, -okdir 관련 진단 정보를 표시.opt최적화와 관련된 진단 정보 표시.rates각 속성의 성공한 빈도를 나타냅니다.tree표현식 트리를 표시.search디렉토리 트리를 자세히 탐색.statstat(2), lstat(2)에 대한 추적을 호출한다.표현식 : 표현식 유형은 Tests | Actions | Global options | Positional Options | Operators 로 나뉜다. (여기서는 모두 다루기 어려우므로 자주 사용되는 표현식(옵션,명령) 위주로 설명)Tests :-name지정된 문자열 패턴에 해당하는 파일 검색.-path지정된 문자열 패턴에 해당하는 경로에서 검색.-type지정된 파일 타입에 해당하는 파일 검색.-atime파일 접근(access) 시간을 기준으로 파일 검색. -atime +1 (접근시간이 24시간 이상인 파일 검색)-amin파일 접근(access) 분을 기준으로 파일 검색. -amin +1 (접근시간이 1분 이상인 파일 검색) -ctime파일 내용 및 속성 변경(change) 시간을 기준으로 파일 검색. -ctime +1 (변경시간이 24시간 이상인 파일 검색)-cmin파일 내용 및 속성 변경(change) 분을 기준으로 파일 검색. -mtime파일 데이터 수정(modify) 시간을 기준으로 파일 검색. -mtime +1 (수정시간이 24시간 이상인 파일 검색)-mmin파일 데이터 수정(modify) 분을 기준으로 파일 검색. -user지정 사용자 소유의 파일을 검색. -user psjco (psjco 소유의 파일 검색)-group지정 그룹에 속한 파일을 검색. -executable현재 사용자 기준으로 실행가능한 파일 검색.-readable현재 사용자 기준으로 읽을 수 있는 파일 검색.-writable현재 사용자 기준으로 쓸 수 있는 파일 검색.-empty빈 디렉토리 또는 파일 검색.-size파일 크기를 사용하여 파일 검색.Global options : -mindepth검색을 시작할 하위 디렉토리 최소 깊이 지정.-maxdepth검색할 하위 디렉토리의 최대 깊이 지정.Actions : -delete검색된 파일 또는 디렉토리 삭제.-exec검색된 파일에 대해 지정된 명령 실행.-print검색 결과를 출력. 검색 항목은 newline으로 구분. (기본 값)-print0검색 결과를 출력. 검색 항목은 null로 구분.-printf 검색 결과를 포멧을 지정하여 출력. -quit첫 검색 결과 출력 후 종료. (더 이상 검색하지 않음) 표현식 연산자 적용 : 2개 이상 표현식을 조합할 수 있다.([EXPR])연산자 우선순위 설정. "()"![EXPR]NOT 연산자. (-not, !)-not [EXPR][EXPR1] -a [EXPR2]AND 연산자. (-a, and)[EXPR1] and [EXPR2] [EXPR1] [EXPR2]AND 연산자 생략가능!, 2개 이상 표현식에 연산자는 기본 AND[EXPR1] -o [EXPR2]OR 연산자. (-o, or) [EXPR1] or [EXPR2]
#3. 명령어 사용 예제
기본적인 사용 방법은 다음과 같다.
$ find [옵션] [경로] [표현식..]
[옵션]의 경우 잘 사용하지 않아서, 존재를 알지 못하는 사용자도 많다. (나 또한 그랬다) 다음 예는 현재 경로에서 "FILE"로 시작하는 파일을 찾는 예입니다. 현재 경로에서의 파일 검색은 파일이 많은 디렉터리가 아닌 이상 사용할 일이 잘 없다.
$ ll합계 16-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 FILE0.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 FILE1.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 FILE2.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 FILE3.txt$ find FILE*FILE0.txtFILE1.txtFILE2.txtFILE3.txt
그렇다 보니, 다음과 같은 기본 형식으 변형하여 자주 사용한다.
$ find . -name "FILE*"./FILE0.txt./FILE1.txt./FILE2.txt./FILE3.txt
자주 사용되는 find 명령어는 다음과 같다.
NO. | 명령어 | 설명 |
1 | find | 현재 경로에 파일/디렉터리 표시 |
2 | find [경로] | [경로]에 있는 모든 파일/디렉터리 표시 |
3 | find [NAME] | 현재 경로에 [NAME]검색 |
4 | find. -name [NAME] | 현재 경로 하위 파일/디렉터리에서 [NAME]검색 |
5 | find /-name [NAME] | 루트 "/" 디렉터리 하위에서 [NAME]검색 |
6 | find~ -name [NAME] | 사용자의 홈디렉터리 하위에서 [NAME] 검색 |
7 | find. -name "*STR*" | 현재 경로 하위에서 특정 문자열을 포함하는 파일/디렉터리 검색 |
8 | find. -empty | 현재 경로 하위에서 빈 디렉터리 혹은 크기가 0인 파일 검색 |
9 | find . -name"*.EXT" -delete | 현재 경로 하위에서 특정 확장자의 파일 검색 후 삭제처리 |
10 | find. -name [NAME] -print0 | 현재 경로 하위에서 [NAME]을 검색하여 줄 바꿈 없이 표시 |
11 | find . -name[NAME] -type f,d,l | 현재 경로 하위 파일/디렉터리/심볼릭링크에서 [NAME]을 검색 |
12 | find . -mtime N | 현재 경로 하위에서 수정시간 기준 파일/디렉터리 검색 |
13 | find . -size +[SIZE1]c -size -[SIZE2]c | 현재 경로 하위에서 파일 사이즈로 검색 |
14 | find . -maxdepth 1 -name [NAME] | 현재 경로에서만 [NAME] 검색 (하위 디렉터리 미포함) |
15 | find . -perm 0664 | 현재 경로에서 특정권한의 파일/디렉터리 검색 |
16 | find . -name [NAME] -exec ls -al {} \; | 검색된 파일의 상세정보 출력 (ls 명령 실행) |
17 | find. -name [NAME] -exec grep "STR" {} \; | 검색된 파일에서 문자열 검색 (grep 명령 실행) |
18 | find. -name [NAME] -exec cp {} [경로] \; | 검색된 파일을 특정 [경로]로 복사 (cp 명령 실행) |
19 | find . -name [NAME] -exec tar -xcvf [파일명] {} \; | 검색된 파일로 압축파일 생성 (tar 명령 실행) |
20 | find. -name [NAME] > [FILE_NAME] | 검색된 결과를 파일로 저장 (redirection ">" 실행) |
21 | find. -name [NAME] 2> dev/null | 검색결과 오류 메시지 출력 안 함 (redirection ">" 실행) |
자, 이제부터 하나씩 간단한 예제와 함께 보충설명 들어간다.
#3-1. 현재 경로에 파일/디렉토리 표시
find 명령에 옵션, 경로, 표현식을 생략하는 경우 현재 경로 하위에 파일/디렉터리를 찾아 출력한다.
find : 현재경로 하위에서 파일/디렉터리를 검색해 출력
$ find../.bash_logout./.bash_profile./.bashrc./.bash_history./FILE0.txt./FILE1.txt./FILE2.txt./FILE3.txt./DIR0./DIR0/FILE0.txt./DIR0/FILE1.txt./DIR1./DIR2./DIR3
#3-2. [경로]에있는모든파일/디렉터리표시
find 명령에 [경로] 입력을 통해, 해당 경로 하위에 있는 모든 파일/디렉터리를 검색할 수 있다.
find /home : /home 경로 하위에 파일/디렉토리 검색
$ find /home/home/home/psjco/home/psjco/.bash_logout/home/psjco/.bash_profile/home/psjco/.bash_history/home/psjco/FILE0.txt/home/psjco/FILE1.txt/home/psjco/FILE2.txt/home/psjco/FILE3.txt/home/psjco/DIR0/home/psjco/DIR0/FILE0.txt/home/psjco/DIR0/FILE1.txt/home/psjco/DIR1/home/psjco/DIR2/home/psjco/DIR3
#3-3. 현재경로에[NAME]검색
find 명령에 문자열 입력을 통해, 현재 경로에 있는 특정 이름을 가진 파일/디렉터리를 검색할 수 있다. (하위 경로 미포함)
find "NAME" : 현재 경로에서 "NAME" 이름의 파일/디렉터리 검색
$ find "FILE0.txt"FILE0.txt
#3-4. 현재경로하위파일/디렉터리에서[NAME] 검색
find 명령에 경로를 지정해서, 해당 경로 하위에서 특정 이름을 가진 파일/디렉터리를 검색할 수 있다.
find . -name "NAME": 현재 경로 하위에서 "NAME"의 파일/디렉터리 검색
$ find . -name "FILE0.txt"./FILE0.txt./DIR0/FILE0.txt
#3-5. 루트 "/" 디렉토리 하위에서 [NAME] 검색
find 명령에 경로를 지정해서, 시스템 루트 하위에서 특정 이름을 가진 파일/디렉터리를 검색할 수 있다. (권한이 없을 경우 sudo 명령을 붙여서 실행 필요)
find / -name "NAME": "/" 루트경로 하위에서 "NAME"의 파일/디렉터리 검색
$ sudo find / -name "FILE0.txt"/home/psjco/FILE0.txt/home/psjco/DIR0/FILE0.txt
#3-6.사용자의홈 디렉터리하위에서[NAME]검색
find 명령에 경로를 지정해서, 사용자 홈디렉터리 하위에서 특정 이름을 가진 파일/디렉터리를 검색할 수 있다.
find ~ -name "NAME": 사용자 홈 디렉토리하위에서 "NAME"의 파일/디렉토리 검색
$ find ~ -name "FILE0.txt"/home/psjco/FILE0.txt/home/psjco/DIR0/FILE0.txt
#3-7. 현재경로하위에서특정문자열을포함하는파일/디렉토리검색
find 명령에 문자열 시작/끝에 와일드카드 문자(*)를 포함하여 특정 문자열이 포함된 파일/디렉토리를 검색할 수 있다.
find . -name "*STR*":현재 경로 하위에서 "STR" 문자열을 포함하는 파일/디렉터리 검색
$ find . -name "*0*"./FILE0.txt./DIR0./DIR0/FILE0.txt
#3-8. 현재경로하위에서빈디렉토리혹은크기가0인파일검색
-empty 표현식을 사용하면 해당 경로 하위에서 빈 디렉토리 or 크기가 0인 파일을 검색할 수 있다.
find . -empty :현재 경로 하위에서 빈 디렉터리 나 크기가 -0인 파일을 검색
$ find . -empty./DIR0/FILE1.txt./DIR1./DIR2./DIR3
#3-9. 현재경로하위에서특정확장자의파일검색후삭제처리
-delete 표현식을 사용하면 검색된 파일/디렉터리의 삭제처리가 가능하다. -name "*.EXT"로 특정 확장자의 파일을 검색 후 삭제할 수 있다.
find . -name "*.EXT" -delete : ".EXT"확장자를 가진 파일을 찾아 삭제 처리
$ ll합계 8-rw-rw-r--. 1 psjco psjco 10 12월 21 13:31 FILE_DEL_TEST.abc-rw-rw-r--. 1 psjco psjco 10 12월 21 13:32 FILE_DEL_TEST1.abc$ find . -name "*.abc"./FILE_DEL_TEST.abc./FILE_DEL_TEST1.abc$ find . -name "*.abc" -delete$ ll합계 0
#3-10. 현재경로하위에서[NAME]을검색하여줄바꿈없이표시
-print0 표현식을 사용하면 출력 결과를 줄 바꿈 없이 표시할 수 있다. -print 표현식의 경우 줄 바꿈을 표시한다. (기본값)
find . -name [NAME] -print0 :현재 경로 하위에서 "NAME"의 파일/디렉터리 검색하여 줄 바꿈 없이 표시
$ find . -name "FILE0.txt" -print0./FILE0.txt./DIR0/FILE0.txt# -print : 출력 관련 표현식을 생략하면 기본값$ find . -name "FILE0.txt" -print ./FILE0.txt./DIR0/FILE0.txt
#3-11. 현재 경로 하위 파일/디렉터리/심볼릭 링크에서 [NAME]을 검색
-type 표현식을 사용해서 검색 유형을 지정할 수 있다. type는 "f" 폴더, "d" 디렉터리, "l" 심볼릭링크로 지정할 수 있다.
find . -name [NAME] -type f: 현재 경로하위에서 "NAME"의 파일을 검색하여 표시
$ find . -name "*0*"./FILE0.txt./DIR0./DIR0/FILE0.txt$ find . -name "*0*" -type f./FILE0.txt./DIR0/FILE0.txt$ find . -name "*0*" -type d./DIR0
#3-12. 현재 경로 하위에서 수정시간 기준 파일/디렉터리 검색
-mtime 표현식을 통해 수정시간 기준으로 파일을 검색할 수 있다. -atime(액세스 시간), -ctime(변경 시간), -mmin(수정 분), -amin(액세스 분), -cmin(변경 분) 등 표현식도 사용 가능하다.
find . -mtime -N :현재 경로 하위에서 수정시간이 N*24 시간 미만인 파일/디렉터리 검색
+N : 수정시간이 1*24 (24)시간 보다 큰 파일/디렉터리
-N : 수정시간이 1*24 (24)시간 미만인 파일/디렉터리
N : 수정시간이 1*24 (24)시간 정확히 일치하는 파일/디렉터리
$ date2020. 12. 21. (월) 13:51:22 KST$ ll -R.:합계 16drwxrwxr-x. 2 psjco psjco 40 12월 21 13:24 DIR0drwxrwxr-x. 2 psjco psjco 6 12월 21 12:38 DIR1drwxrwxr-x. 2 psjco psjco 6 12월 21 12:38 DIR2drwxrwxr-x. 2 psjco psjco 6 12월 21 13:32 DIR3-rwSrw-r--. 1 psjco psjco 14 12월 17 15:32 FILE0.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 FILE1.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 FILE2.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 FILE3.txt./DIR0:합계 4-rw-rw-r--. 1 psjco psjco 15 12월 21 12:54 FILE0.txt-rw-rw-r--. 1 psjco psjco 0 12월 21 13:24 FILE1.txt./DIR1:합계 0./DIR2:합계 0./DIR3:합계 0# 수정시간이 24시간 보다 큰 파일/디렉토리 검색$ find . -mtime +1./FILE0.txt./FILE1.txt./FILE2.txt./FILE3.txt# 수정시간이 24시간 미만인 파일/디렉토리 검색$ find . -mtime -1../DIR0./DIR0/FILE0.txt./DIR0/FILE1.txt./DIR1./DIR2./DIR3# 수정시간이 1000분 미만인 파일/디렉토리 검색$ find . -mmin -1000../DIR0./DIR0/FILE0.txt./DIR0/FILE1.txt./DIR1./DIR2./DIR3
#3-13. 현재경로하위에서파일사이즈로검색
-size 표현식을 사용해서 파일/디렉터리 사이즈로 검색도 가능하다. +/- 를 통해 초과/미만으로 검색 가능하며, 크기 값 뒤에 c/k 등의 구분자를 붙여 용량 기준을 설정할 수 있다.
b : block
c : bytes
w : 2-byte words
k : kibibytes (KiB, unit of 1,024 bytes)
M : mebibytes (MiB, 1,024*1,024=1,048,576 bytes)
G : gibibytes (GiB, 1,024*1,024*1,024=1,073,741,824 bytes)
find . -size +[SIZE1]c -size -[SIZE2]c:현재 경로 하위에서 크기가 SIZE1 bytes 초과 SIZE2 bytes 미만인 파일/디렉터리를 검색한다
$ ll합계 16drwxrwxr-x. 2 psjco psjco 40 12월 21 13:24 DIR0drwxrwxr-x. 2 psjco psjco 6 12월 21 12:38 DIR1drwxrwxr-x. 2 psjco psjco 6 12월 21 12:38 DIR2drwxrwxr-x. 2 psjco psjco 6 12월 21 13:32 DIR3-rwSrw-r--. 1 psjco psjco 14 12월 17 15:32 FILE0.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 FILE1.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 FILE2.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 FILE3.txt# 10bytes 초과하고 40bytes 미만인 파일/디렉토리 검색$ find . -size +10c -size -40c./FILE0.txt./FILE1.txt./FILE2.txt./FILE3.txt./DIR0/FILE0.txt
#3-14. 현재경로에서만[NAME]검색(하위디렉토리미포함)
-maxdepth 표현식을 사용해 검색할 하위 경로의 depth를 한정하여 검색할 수 있다.
find . -maxdepth 1 -name [NAME]:현재 경로에서만 "NAME"의 파일/디렉터리를 검색한다
# 현재 디렉토리에서 이름에 "0"을 포함하는 파일/디렉토리 검색$ find . -maxdepth 1 -name "*0*"./FILE0.txt./DIR0# 현재 디렉토리 하위 1 depth 에서만 이름에 "0"을 포함하는 파일/디렉토리 검색$ find . -maxdepth 2 -name "*0*"./FILE0.txt./DIR0./DIR0/FILE0.txt
#3-15. 현재경로에서특정 권한의파일/디렉터리검색
-perm 표현식을 통해 특정 권한을 가진 파일/디렉터리를 검색할 수 있다.
find . -perm 0664:현재 경로 하위에서 "0664 -rw-rw-r--" 권한을 가진 파일/디렉터리를 검색한다
$ ll합계 16drwxrwxr-x. 2 psjco psjco 40 12월 21 13:24 DIR0drwxrwxr-x. 2 psjco psjco 6 12월 21 12:38 DIR1drwxrwxr-x. 2 psjco psjco 6 12월 21 12:38 DIR2drwxrwxr-x. 2 psjco psjco 6 12월 21 13:32 DIR3-rwSrw-r--. 1 psjco psjco 14 12월 17 15:32 FILE0.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 FILE1.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 FILE2.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 FILE3.txt#현재 경로하위에서 "0664 -rw-rw-r--" 권한을 가진 파일/디렉토리를 검색한다$ find . -perm 0664./FILE1.txt./FILE2.txt./FILE3.txt./DIR0/FILE0.txt./DIR0/FILE1.txt#현재 경로하위에서 "4664 -rwSrw-r--" 권한을 가진 파일/디렉토리를 검색한다$ find . -perm 4664./FILE0.txt
#3-16. 검색된파일의상세정보출력(ls명령실행)
-exec 표현식과 ls 명령을 사용, 현재 경로 하위에서 "NAME"을 포함하는 파일/디렉토리를 검색 후 -exec ls -al을 통해 상세정보를 출력한다.
find . -name [NAME] -exec ls -al {} \; : 현재 경로 하위에서 "NAME"의 파일/디렉터리를 검색 후 상세 정보를 출력
$ find . -name "FILE*" -exec ls -al {} \;-rwSrw-r--. 1 psjco psjco 14 12월 17 15:32 ./FILE0.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 ./FILE1.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 ./FILE2.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 ./FILE3.txt-rw-rw-r--. 1 psjco psjco 15 12월 21 12:54 ./DIR0/FILE0.txt-rw-rw-r--. 1 psjco psjco 0 12월 21 13:24 ./DIR0/FILE1.txt
#3-17. 검색된파일에서문자열검색(grep명령실행)
-exec 표현식과 grep 명령을 사용, 현재 경로 하위에서 "NAME"을 포함하는 파일/디렉토리를 검색 후 -exec grep "STR"을 통해 검색된 파일에서 "STR" 문자열을 포함한 라인을 출력할 수 있다.
find . -name [NAME] -exec grep "STR" {} \; :현재 경로 하위에서 "NAME"의 파일을 검색 후 "STR"문자를 포함하는 라인을 출력
# 현재경로 하위에 "FILE"로 시작하는 파일/디렉토리를 검색 후 # 해당 파일의 내용중에 "test" 문자열을 포함하는 라인을 출력$ find . -name "FILE*" -exec grep -i "test" {} \;test test test testtest1 test1 test1test2 test2test3test0 file# 현재경로 하위에 "FILE"로 시작하는 파일/디렉토리를 검색 후 # 해당 파일의 내용중에 "test" 문자열을 포함하는 라인을 파일명/라인번호를 포함해 출력$ find . -name "FILE*" -exec grep -Hn "test" {} \;./FILE0.txt:4:test test test test./FILE0.txt:5:test1 test1 test1./FILE0.txt:6:test2 test2./FILE0.txt:7:test3./DIR0/FILE0.txt:1:test0 file
#3-18.검색된파일을특정[경로]로복사(cp명령실행)
-exec 표현식과 cp 명령을 사용해서 검색된 파일을 특정 경로로 복사할 수 있다.
find . -name [NAME] -exec cp {} [경로] \;:현재 경로 하위에서 "NAME"의 파일/디렉터리를 검색 후 "경로"로 복사
# 현재경로에서(하위경로 미포함) "FILE0.txt" 파일을 "DIR3/" 으로 복사$ find . -maxdepth 1 -name "FILE0.txt" -exec cp {} DIR3/ \;$ find . -name "FILE0.txt"./FILE0.txt./DIR0/FILE0.txt./DIR3/FILE0.txt
#3-19. 검색된파일로압축파일생성(tar명령실행)
-exec 표현식과 tar 명령을 사용해서 검색된 파일을 압축파일로 생성할 수 있다.
find . -name [NAME] -exec tar -xcvf [파일명.tar.gz] {} \;:현재 경로 하위에서 "NAME"의 파일/디렉터리를 검색 후 "파일명.tar.gz" 압축파일 생성
$ find . -name "FILE1.txt" -exec tar -zcvf FILES.tar.gz {} \;./DIR0/FILE1.txt./FILE1.txt$ ll합계 24drwxrwxr-x. 2 psjco psjco 40 12월 21 15:21 DIR0drwxrwxr-x. 2 psjco psjco 6 12월 21 12:38 DIR1drwxrwxr-x. 2 psjco psjco 6 12월 21 12:38 DIR2drwxrwxr-x. 2 psjco psjco 23 12월 21 15:59 DIR3-rwSrw-r--. 1 psjco psjco 69 12월 21 15:21 FILE0.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 FILE1.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 FILE2.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 FILE3.txt-rw-rw-r--. 1 psjco psjco 140 12월 21 16:05 FILES.tar.gz-rw-rw-r--. 1 psjco psjco 36 12월 21 15:30 FILE_LIST.txt
#3-20. 검색된 결과를 파일로 저장 (redirection ">" 실행)
">" redirection 표현식을 사용해서 -print 표준 출력이 아닌 결과를 파일로 저장할 수 있다.
find . -name [NAME] > [FILE_NAME]:현재 경로 하위에서 "NAME"의 파일/디렉터리를 검색 후 "FILE_NAME" 파일에 결과를 출력
$ find . -name "*0*" > FILE_LIST.txt$ ll합계 20drwxrwxr-x. 2 psjco psjco 40 12월 21 15:21 DIR0drwxrwxr-x. 2 psjco psjco 6 12월 21 12:38 DIR1drwxrwxr-x. 2 psjco psjco 6 12월 21 12:38 DIR2drwxrwxr-x. 2 psjco psjco 6 12월 21 13:32 DIR3-rwSrw-r--. 1 psjco psjco 69 12월 21 15:21 FILE0.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 FILE1.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 FILE2.txt-rw-rw-r--. 1 psjco psjco 14 12월 17 15:32 FILE3.txt-rw-rw-r--. 1 psjco psjco 36 12월 21 15:30 FILE_LIST.txt$ cat FILE_LIST.txt./FILE0.txt./DIR0./DIR0/FILE0.txt
#3-21.검색 결과오류메시지출력안 함(redirection">"실행)
">" redirection 표현식을 사용하면, find 명령 실행 시 빈번하게 발생하는 permission 관련 오류 메시지를 표시하지 않도록 하여 결과 확인을 원활하게 할 수 있다.
find / -name [NAME] 2> dev/null : 시스템 루트 하위에서 "NAME"의 파일/디렉터리를 검색, 오류 메시지 출력 안 함
표준 에러(2)를 "/dev/null"로 Redirection 처리
# 오류메시지 출력$ find / -name "FILE0*"find: ‘/boot/efi/EFI/centos’: 허가 거부find: ‘/boot/grub2’: 허가 거부/home/psjco/FILE0.txt/home/psjco/DIR0/FILE0.txtfind: ‘/proc/tty/driver’: 허가 거부......# 오류메시지 출력 안함.$ find / -name "FILE0*" 2> /dev/null/home/psjco/FILE0.txt/home/psjco/DIR0/FILE0.txt
이상 리눅스 "find" 명령어에 대해 정리해 봤다.
실무에서 자주 사용하게되는 추가 명령어나, 표현식이 생기면 업데이트하겠다.
도움이 되셨다면, 공감 or 댓글 하나 씨게 부탁한다. ^ㅡ^*