find [대상경로] [표현식]
find [옵션] [대상경로] [표현식]


1. 테스트
1) 시간 관련
| 테스트 | 설명 |
| -amin n | 현재시각을 기준으로 n분전에 액세스된 파일을 찾아줌 |
| -atime n | 현재시각을 기준으로 n*24시간 전에 액세스 된 파일 찾음 |
| -cmin n | 현재시각을 기준으로 n분 전에 이름이 변경된 파일 찾음 |
| -ctime n | 현재시각을 기준으로 n*24시간 전에 이름이 변경된 파일찾음 |
| -mmin n | 현재시각을 기준으로 n분 전에 내용이 수정된 파일 찾음 |
| -mtime n | 현재시각을 기준으로 n*24시간 전에 내용이 수정된 파일을찾음 |





2) 최신 파일 검색
| 테스트 | 내용 |
| -anewer file | 명시된 파일보다 최근에 접근한 파일을 찾아줌 |
| -cnewer file | 명시된 파일보다 최근에 변경된 파일을 찾아줌 |
| -newer file | 명시된 파일보다 최근에 수정된 파일을 찾아줌 |
| -newerXY file | 명시된 파일의 속성보다 최근에 수정된 파일을 찾아줌, 파일 속성은 XY로 표시하며, 다음과 같은 속성이 있으며, 속성 B는 리눅스에서 사용할 수 없음 a 파일 참조의 액세스 시간 B 파일 참조의 탄생 시간 c inode 상태 변경 시간참조 m 파일 참조의 수정 시간 |
변경과 수정의 차이
내용 변동 없이 파일명만 바뀌면 변경은 일어나도 수정이 되지 않음



-newerXY 로 XY는 파일속성 (a,B,c,m 사용)

3) 파일 권한 테스트
| 테스트 | 내용 |
| -perm mode | 명시된 파일 권한과 동일한 파일을 검색 |
| -perm -mode | 명시된 파일 권한이 포함된 파일을 검색 |
| -perm /mode | 명시된 파일 권한을 소유자, 그룹, 기타로 구분하여 세 개의 권한 중 하나라도 동일한 파일을 검색 |
| -perm +mode | 더이상 사용되지 않으며, 대신 -perm /mode가 +mode를 대신함 |
| -readable | 로그인한 사용자가 읽을 수 있는 파일을 검색 |
| -writeable | 로그인한 사용자가 쓸 수 있는 파일을 검색 |
| -executable | 실행 권한이 있는 파일만 검색 |





4) 그룹 및 사용자 관련 테스트
| 테스트 | 내용 |
| -gid n | 그룹 ID가 명시한 그룹 ID n과 동일한 파일 검색 |
| -group gname | 그룹명이 명시한 그룹명 gname과 동일한 파일 검색 |
| -nogroup | 존재하지 않은 그룹 ID 를 가지고 있는 파일 검색 |
| -nouser | 존재하지 않는 사용자ID를 가지고 있는 파일 검색 |
| -uid n | 사용자ID가 명시한 사용자ID n과 동일한 파일 검색 |
| -user uname | 사용자명이 명시한 사용자명 uname과 동일한 파일 검색 |




5) 파일명 관련 테스트
| 테스트 | 설명 |
| -iname pattern | 대소문자 구분없이 패턴과 일치하는 파일 검색 |
| -inum n | 파일의 Inode 번호 n을 갖는 파일 검색 |
| -lname pattern | 패턴과 일치하는 심볼릭 링크 검색 |
| -name pattern | 패턴과 일치하는 파일 검색 |
| -regex pattern | 패턴과 일치하는 경로 검색, Emacs 정규 표현식이 기본값이며, -regextype 옵션을 사용하여 변경할 수 있음 |
| -iregex pattern | 대소문자 구분없이 패턴과 일치하는 경로 검색 |
| -samefile name | 파일명과 동일한 파일 및 심볼릭 링크 검색, 심볼릭 링크 검색을 위해서는 -L 옵션을 함께 사용 |





6) 파일 경로 테스트
| 테스트 | 설명 |
| -ipath pattern | 대소문자를 구분하지 않고 패턴과 일치하는 경로를 검색 |
| -iwholename pattern | -ipath 테스트와 동일하며, -ipath 테스트보다 이식성이 떨어짐 |
| -links n | N개의 링크를 가지고 있는 경로를 검색 |
| -path pattern | 패턴과 일치하는 경로를 검색 |
| -wholename pattern | -path 테스트와 동일하면 -path 테스트보다 이식성이 떨어짐 |
f로 시작해서 t로 끝나는 파일 검색

링크를 2개 가지고 있는 경로검색


7) 파일 타입 테스트
| 테스트 | 내용 |
| -fstype type | BSD 계열의 운영체제에서 지원되며, -type 테스트와 유사한 기능을 제공 |
| -type c | 명시한 파일 타입과 동일한 파일을 검색, 사용 가능한 파일 타입 b:블록 c: 문자 d:디렉토리 p:명명된 파이프 f:일반파일 l : 심볼릭 링크 s: 소켓 D:door(Solaris) |
| -xtype c | -type 테스트와 동일하며, 심볼릭 링크를 검색할 경우 -L 옵션과 함께 사용 |
| -context pattern | 패턴과 일치되는 보안 컨텍스트를 가진 파일을 검색, SELinux가 있는 페도라 계열 리눅스에서만 사용가능 |

-xtype 사용시 -L 옵션 사용



8) 기타 테스트
| 테스트 | 설명 |
| -true | 항상 true 리턴함 |
| -false | 항상 false 리턴함 |
| -empty | 파일 사이즈 0인 파일을 검색 |
| -size n[cwbkMG] | 명시한 파일 사이즈에 해당하는 파일을 검색 사이즈 단위 b : 512바이트 블록 c : 바이트 w: 2바이트 k : 킬로바이트 M: 메가바이트 G : 기가바이트 |
| -used n | 파일이 변경된 후 n일에 마지막으로 액세스한 파일을 검색 |
false는 결과값을 보여주지 않음



2. 연산자
| 연산자 | 설명 |
| (expr) | 우선순위나 표현식을 그룹핑할 경우 사용되며 백슬래시 \와 함께 사용 |
| ! expr | 표현식의 반대 결과를 리턴 |
| -not expr | ! expr과 같은 결과를 리턴 |
| expr1 expr2 | AND 연산을 수행, expr1이 false면 expr2는 평가되지 않음 |
| expr1 -a expr2 | expr1 expr2와 동일 |
| expr1 -and expr2 | expr1 expr2와 동일하지만 POSIX 호환은 안됨 |
| expr1 -o expr2 | OR연산을 수행하며, expr1이 true면 expr2는 평가되지 않음 |
| expr1 -or expr2 | expr1 -o expr2와 동일하지만 POSIX 호환은 안됨 |
| expr1 , expr2 | expr1, expr2를 각각 수행되며, 결과는 expr2에 해당하는 것만 출력됨, 함께 줄력을 하기 위해서는 -printf나 -fprintf를 함께 사용 |








3. 액션
| 액션 | 설명 |
| -delete | 표현식에 의해 검색된 파일을 삭제 |
| -exec command { } ; | 표현식에 의해 검색된 파일을 인수로 받아 -exec 다음의 명령어를 수행함. 인수로 받을 결과값은 중괄호 { } 로 표현되며 세미콜론; 은 역슬래시\와 함께 사용 |
| -exec command { } + | -exec와 동일하나 결과값을 연 이어서 보여줌 |
| -execdir command { } ; | -exec와 유사하나 서브 디렉토리부터 검색하기 때문에 결과값은 파일명만 출력 |
| -execdir command { } + | -execdir과 동일하나 결과값을 연 이어서 보여줌 |
| -ok command { } ; | -exec와 유사하지만 사용자에게 실행여부를 확인 후 실행 |
| -okdir command { } ; | -execdir와 유사하지만 -ok와 같은 방식으로 사용자에게 실행 여부를 확인 후 실행 |
| -prune | 검색한 패턴이 디렉토리인 경우, 하위 디렉토리의 파일은 검색하지 않음 |
| -quit | -quit 앞에 만난 표현식에 해당하는 파잉ㄹ이 검색되면 검색을 종료함 |

expression.txt에서 CPU를 {}에 대입시켜 검색함





-ok 옵션은 출력값을 표시할 것인지 물어봄( 잘안쓰일듯)

find . 은 현재폴더에서만 검색(하위까지 하지 않음)

텍스트 파일이나 p로 된 파일을 만나면 검색종료

2) 결과출력 관련
| 옵션 | 내용 |
| -fls file | 표현식에 의해 검색된 파일의 결과를 명시한 파일로 ls -l 을 실행한 것과 유사한 결과를 저장함 |
| -fprint file | 표현식에 의해 검색된 파일의 결과를 명시한 파일에 저장 |
| -fprint0 file | 표현식에 의해 검색된 파일의 결과를 명시한 파일에 뉴라인이나 공백없이 저장 |
| -printf format | 역슬래시\ 와 퍼센트%로 된 표준 출력 포맷에 맞게 검색된 파일 결과를 보여줌 |
| -printf file format | -printf와 비슷하지만 -fprint와 같이 검색된 파일을 명시한 파일에 저장 |
| -ls | 표현식에 의해 검색된 파일의 결과를 ls -l을 실행한 것과 유사한 결과를 보여줌 |
| -print; | 표현식에 의해 검색된 파일의 결과를 보여줌 |
| -print0 | 표현식에 의해 검색된 파일의 결과를 뉴라인없이 보여줌 |
특수기호 포맷
| 포맷 의미 | 포맷 의미 | 포맷 의미 |
| \a 알람 | \r 캐리지 리턴 | \NNN 8진 아스키코드 |
| \b 백스페이스 | \t 수평탭 | A'\' \ 뒤는 일반 문자 취급 |
| \c 클리어 | \v 수직탭 | %% 퍼센트 기호 |
| \f 폼피드 | \O 아스키 NUL | |
| \n 뉴라인 | \\ 백슬래시 |
파일속성 포맷
| 포맷 의미 | 포맷 의미 |
| %a ctime의 파일 액세스 시간 | %l 심볼릭 링크 |
| %Ak k에 의한 파일 액세스 시간 | %m 파일 권한(8진수 기준) |
| %b 사용된 디스크 크기(바이트 기준) | %M 파일 권한(문자열 기준) |
| %c 파일의 마지막 상태 변경 시간 | %n 하드링크 수 |
| %Ck k에 의한 파일의 마지막 상태 변경 시간 | %p 경로를 포함한 파일명 |
| %d 파일 깊이(depth) | %P 현재 경로가 없는 파일명 |
| %D 파일 장치 번호 | %s 파일 사이즈(바이트 기준) |
| %f 파일명 | %S 파일의 희소성 |
| %F 파일 시스템 유형 | %t 파일의 마지막 수정 시간 |
| %g 파일 그룹명 또는그룹 ID | %Tk K에 의한 파일의 마지막 수정시간 |
| %G 파일의 그룹 ID | %u 파일의 소유자명 |
| %h 파일명을 제외한 파일 경로 | %U 파일의 소유자 ID |
| %H 명령행 인수 | %y 파일타입, U에 대한 타입이 더 있음 |
| %i 파일의 inode번호 | %Y 파일타입, L, N 타입이 더 있음 |
| %k 사용된 디스크 크기(킬로바이트 기준) | %Z 파일의 보안 컨텍스트 |



%f 는 파일명,
%c 는 파일의 마지막 상태 변경 시간을 의미,
\n 는 뉴라인 의미





4. 위치옵션
| 위치 옵션 | 내용 |
| -d | FreeBSD, NetBSD, MacOS X 및 OpenBSD와의 호환성을 위한 -depth의 동의어 |
| -depth | 서브 디렉토리의 파일을 먼저 검색 |
| -daystart | 24시간이 아닌 해당일을 기준으로 파일 검색 -amin, -atiome, -cmin, -ctime, -mmin 및 -mtime 과 함께 사용해야함 |
| -regextype type | -regex나 -iregex의 정규식 구문을 변경함, 기본 유형은 emacs이며, posix-awk, posix-basic, posix-egrep 및 posix-extended가 있음 |
| -maxdepth levels | 명시한 level만큼 서브 디렉ㅌ토리의 파일까지 검색 |
| -mindepth levels | 명시한 level의 서브 디렉토리부터 파일을 검색 |
| -mount | USB나 CD-ROM과 같은 시스템의 파일을 검색하지 않음 |
| -warn, -nowarn | 경고 메세지를 켜거나 끔 , 명령줄 사용법에만 적용되며 디렉토리를 검색할 때 발견되는 조건에는 적용되지 않으며, 표준 입력이 tty이면 -warn, 그렇지 않으면 -nown에 해당함 |
| -help, --help | find 사용법을 보여줌 |
| -version, --version | find 버전을 보여줌 |
기본은 현재 디렉토리부터 검색
-depth 는 디렉토리부터 검색됨


daystart 는 현재 시간 기준으로 현재 날짜에 수정된 파일 검색


POSIX 기본(emacs) 사용했을때와 타입(posix-awk, posix-basic, posix-egrep, posix-extended)을 지정했을때

명시한 레벨만큼 서브 디렉토리 파일까지 검색

마운트된 file system이 없으므로 아무것도 안나옴



5. find 옵션
1) 심볼릭 링크 관련
| 옵션 | 내용 |
| -P | 파일을 검사할때 파일이 심볼릭 링크인 경우, 심볼릭 링크 자체의 속성을 검사하며, find의 기본 옵션, 따라서 옵션을 생략하면 -P옵션으로 적용됨 |
| -L | 파일을 검사할때 파일이 심볼릭 링크인 경우, 심볼릭 링크에 연결된 파일의 속성을 검사하며, 검사되는 모든 파일 목록을 보여줌 |
| -H | 팡리을 검사할때 심볼릭 링크인 경우, 심볼릭 링크 자체의 속성을 검사하나, 명령 행에 지정된 파일이 심볼릭 링크인 경우, 심볼릭 링크에 연결된 파일의 속성을 검사함 |


file 속성 확인

파일 내용의 검색

2) 디버그 관련 옵션
| 옵션 | 내용 |
| -D help | 디버깅 옵션을 설명 |
| -D tree | 표현식 트리를 원래의 최적화된 형태로 보여줌 |
| -D search | 디렉토리 트리를 자세하게 탐색 |
| -D stat | stat나 lstat와 같은 시스템 호출이 필요하 파일을 검사핼때 메세지를 보여줌 |
| -D rates | 표현식이 얼마나 성공했는지를 요약해서 보여줌 |
| -D opt | 표현식 tree최적화와 관련된 진단 정보를 보여줌, 최적화와 관련된 -O 옵션을 참조하여 사용 |


디렉토리 트릐 자세히 탐색


-D rates 표현식

-D opt 표현식 tree 최적화 정보

3) 레벨 관련 옵션
- find 사용하여 파일 검색 때 사용된 전반적인 테스트의 효과를 유지하면서 실행 속도를 높이기 위해 테스트 순서 변경
| 옵션 | 내용 |
| -O0 | 최적화 수준1과 같음 |
| -O1 | 기볹거 최적화 수준으로, 파일이름 (ex: -name 및 -regex)을 기반으로 하는 테스트가 먼저 수행되도록 식 순서가 바뀜 |
| -O2 | -type이나 -xtype과 함께 사용할때 -name테스트한 후 -type테스트를 수행 |
| -O3 | 전체 비용 기반 쿼리 최적화 프로그램이 활성화됨. -o 의 경우 성공할 수 있는 표현식이 더 빨리 평가되고 -a의 경우실패할 수 있는 표현식이 더빨리 평가됨 |
최적화 수준 1과 동일

파일 권한, 파일명 순서로 검색하면 파일명, 권한 순서로 변경됨

파일 명을 찾고 그 다음 단계로 넘어감

파일명 찾고 바로 이어 파일 타입을 평가한 후 그다음 단계로 넘어감

-O3 은 전체 비용기반 쿼리 최적화 프로그램 활성화
-a 연산 평가율 0.08

-o 연산 평가율 0.9

'shell_script' 카테고리의 다른 글
| shell 기본 sed (0) | 2021.07.30 |
|---|---|
| shell 기본 awk (0) | 2021.07.29 |
| shell 기본 grep (0) | 2021.07.27 |
| shell 기본 명령문 (0) | 2021.07.27 |
| shell 명령어 (0) | 2021.07.26 |