[Linux] 파일 찾기(find)
▶ find [옵션1] [경로] [옵션2][검사식][동작]... 표현식↑
명령옵션: 명령 전체에 영향을 미치는 옵션
경로: 검색을 시작할 루트 디렉터리 경로(생략시 현재 디렉터리에서 검색)
표현식(expression): 검색 대상에 적용될 연산 및 동작을 기술(생략시 기본동작은 -print(표준출력))
-파일 검색 명령어
-파일명, 파일유형, 소유자, 시간 등을 기준으로 검색
-검색된 명령어에 대해 추가적인 명령 수행 가능
-Linux의 표준 명령 구문과 다른 구문을 사용
-지정한 경로를 시작으로 모든 하위 디렉터리 항목(파일,디렉터리)를 검색
[명령옵션1]
-심볼릭 링크 처리옵션
-P :기본, 검색 대상 파일이 심볼릭 링크일 경우, 원본을 대상으로 하지않고 링크 자체를 대상
-L :심볼릭 링크가 가리키는 원본을 검색대상으로 함
-H :명령인자로 지정한 심볼릭 링크만 원본을 대상으로 하고 나머지 심볼릭 링크는 -P와 동일
-기타옵션
-D 디버깅수준 :진단 정보를 출력, help,tree,stat,opt,rates
-O 최적화수준: 질의 최적화, -O0 -O1 -O2, -O3
[검사식]
[이름으로 항목(파일/디렉터리) 찾기]
-검사식: -name 패턴 또는 iname 패턴
-현재 파일의 base이름이 패턴과 일치하면 True
패턴에 와일드카드문자를 사용하여 형태를 지정
ex)
$ find -name "*java"
$ find /home/mylinux -name "[a-z]*?"
$ find /user/src /user/local/src -name "*.h" -print
$ find /home/mylinux –name *.java –print
$ find /usr /home /tmp –name “*.jar” 2> /dev/null
[동작]
-검색된 항목에 대해 수행될 동작을 지정
-동작이 생략되면 기본으로 -print를 수행, 항상 Ture 반환
-print0 :-print와 동일하나 줄바꿈 문자 대신 공백
-fprint 파일명, -fprint0 파일명 :print, print0와 동일하나 지정한 파일에 출력
-exec 명령 \;
지정한 Linux명령어 수행, 수행 결과0이 반환되면 True, 검색된 항목을 명령 인자로 전달하는 방법은{ }
ex)
$find -name "*,java" -exec ls -l { } \;
$ find /home/mylinux –name “[a-z]*?” -exec rm -f { } \;
$ find /usr /home /tmp –name “*.mp4” -exec du -s { } \; 2> dev/null
-ok 명령 \; :exec와 동일하나 연산을 수행 때마다 매번 확인
-ls :'ls -dils *' 명령과 같은 형식으로 출력
-fls 파일명 :-ls와 같은 결과를 지정파일에 저장
-delete :파일 또는 빈 디렉터리 삭제, 삭제 성공하면 True (-depth옵션 자동적용)
-prune :검색 항목이 디렉터리인 경우, 그 내부는 탐색하지 않음, 항상 True
-quit :즉시중지
ex) $ find -name "a.out" -exec ls -l {} \; -quit
[검사식]
- 파일유형에 따른 검색
현재 파일이 지정한 유형일 경우 true
[지정한 가능한 유형의 종류]
-type [파일유형]
f :일반파일 d:디렉터리 p:파이프 s:소켓
b :블록파일 c:문자장치 l: 소프트 링크
ex)
$ find . –type d
$ find . –type d –name “t*” -exec ls –l { } \;
$ find . –type l –print
$ find /dev –type b –name “s*” –exec ls –l { } \; 2> /dev/null
$ find /home/mylinux –type f –name “*.out” -prinf
- 시간에 따른 검색
-mtime | -atime | -ctime [옵션]
-mmin | -amin | -cmin [옵션]
-mtime :파일의 데이터가 마지막으로 수정(modify)된 시간
-atime :파일을 읽기 또는 접근(access)한 시간
-ctime :파일의 속성이 변경(change)된 시간
[옵션]
N :정확히 N인 시간
-N :N이하인 시간
+N :N이상인 시간
시간은 현재 시간을 기준으로 지난 24시간을 나눴을 때 몫
ex)
$ find . -mtime 0 :24시간 이내의 시간에 수정된 파일 찾기
$ find . –atime 1 :24시간에서 48시간 사이에 접근한 파일 찾기
$ find . –ctime -2 :48시간 이내의 시간에 변경된 파일 찾기
$ find . –mtime +1 :24시간보다 더 이전에 수정된 파일 찾기
$ find . –mtime +1 –mtime -4 :24시간보다 크고 96시간이내 시간에 수정된 파일
- 시간관련 옵션
-daystart :오늘 0시를 기준으로 시간 적용, 항상 true
$ find . –daystart –mtime 0 # 오늘 수정된 파일 찾기
$ find . –daystart -mtime 1 # 하루 전날 수정된 파일 찾기
$ find . –daystart –mtime 2 –ctime 1 # 이틀 전날 수정되고 하루 전날 변경된 파일
※이 옵션 뒤에 나오는 표현식에만 영향을 줌※
ex) $ find . –mtime 1 –daystart # 현재 시간을 기준으로 24~48시간에 수정된 파일
- 파일 기준 검색
-newer 파일명 | -anewer 파일명 | -cnewer 파일명
-지정된 파일보다 더 최근에 수정/접근/속성변경된 파일 검색
ex) $ find -newer hello.c -exec ls -l { } \
- 크기에 따른 검색
-size 크기
크기: [+ | - ]N[bcwkMG]
N, +N ,-N : 시간에 따른 검색과 동일 의미
b: 블록(기본), c: 바이트, w: 워드(2바이트), k: 킬로바이트, M: 메가바이트, G: 기가바이트
-empty
현재 파일의 크기가 0일 때 True
ex)
$ find / -size +5000c 2> /dev/null
$ find / -type f –size 0 –exec rm –f { } \;
$ find / -empty –exec rm –f { } \;
- 권한에 따른 검색
-현재 파일에 대한 읽기, 쓰기, 실행 권한 여부에 따라 true/false 결정
-readable :읽기 가능 접근권한이 있을 때 True
-writeable :쓰기 가능 접근권환이 있을 때 True
-executable :실행 가능 접근 권환이 있을 때 True
-perm [-|/]권한
-권한 앞에 지시어가 없는 경우(정확히 지정한 권한을 의미)
ex) $ find . –type f –perm a=rwx –exec ls –l { } \;
-권한 앞에 ‘-’인 경우: 지정한 권한이 모두 설정된 파일
ex) find . –type f –perm -ug=rx –exec ls –l { } \;
-권한 앞에 ‘/’인 경우: 지정한 권한이 하나라도 설정된 파일
ex) $ find . –type f –perm /go=rx –exec ls –l {} \;
- 소유권에 따른 검색
사용자 검사: -user 사용자명, -uid 사용자ID
ex)
# find / –type f –user baduser –exec ls –l {} \;
# find / -name “*rc” –uid 500 –exec ls –ld {} \;
그룹 검사: -group 그룹명, -gid 그룹ID
ex)
# find / –type f –group users –exec ls –l {} \;
# find / -type d -gid 100 –exec ls –ld {} \;
사용자나 그룹이 없는 파일: -nouser, -nogroup
# find / –nouser –exec ls –ld {} \; 2> /dev/null
# find / -nogroup –exec ls –ld {} \; 2> /dev/null
- 기타 검사식
-samefile 파일명 : 대상파일이 지정한 파일의 inode와 같은 동일 파일일 경우
-path 패턴, -ipath패턴 :대상 파일의 전체 경로명이 지정한 패턴과 일치할 경우
[파일 항목의 평가]
- 검색대상 항목인 파일/디렉터리 하나에 대해 표현식을 실행
-표현식에 나열된 표현식 항목을 우선순위에 따라 왼쪽에서 오른쪽으로 하나씩 평가
-표현식에 나열된 '옵션', '검사식' '동작'들은 각각의 탐색 항목에 대해 평가해서 Ture 또는 False 반환
-표현식 항목의 평가가 True일 경우 다음 표현식 항목이 평가
-표현식 항목의 평가가 False일 경우 다음 검색대상에 대해 첫 번째 표현식부터 재평가
[검색 대상 방문순서]
-기본으로 디렉터리 우선 방문(pre-order)
-depth옵션이 지정된 경우 디렉터리보다 디렉터리 내부의 항목 우선 방문(post-order)
-depth는 명령 옵션이 아니라 표현식옵션, 항상 true ,경우에 따라 -depth를 지정
[표현식옵션2]
-maxdepth level, -minddepth level
-탐색최대/최소 싶이 지정
-시작 디렉터리는0 시작디렉터리 내용은1
-depth
-디렉터리보다 디렉터리 내용을 먼저 처리
-delete 액션은 자동 –depth
-mount, -xdev
-다른 파일시스템을 탐색하지않음
-regextype type
-정규표현식 형식을 다른 것으로 변경
[type]
emacs(기본), grep, egrep, awk, sed, gnu-awk, posix-awk, posix-basic, posix-egrep, posix-extended
- 연산자
-우선 순위는 다음 나열된 순서
괄호 :\( expr \)
not연산자 :\! expr, -not expr
and연산자 :expr1 expr2, expr1 –a expr2, expr1 –and expr2
or연산자 :expr1 –o expr2, expr1 –or expr2
, :expr1, expr2 -나열의 전체 결과는 expr2의 결과