Linux 및 Unix 명령 사용 : find

LinuxUnix 명령 find 는 디렉토리 계층에있는 파일을 검색합니다.

find 명령의 구문 :

찾기 [경로 ...] [표현]

기술

이 매뉴얼 페이지는 find 의 GNU 버전을 설명합니다. find 명령은 결과를 알 때까지 우선 순위 규칙 (아래 연산자에 대한 섹션 참조)에 따라 주어진 표현식을 왼쪽에서 오른쪽으로 평가하여 각 주어진 파일 이름에 뿌리를 둔 디렉토리 트리를 검색합니다. 즉, 왼손 측은 false operations, 또는 에 대해 true이고, 어느 점에서 find 는 다음 파일 이름으로 이동합니다.

다음으로 시작하는 첫 번째 인수는 다음과 같습니다.

표현의 시작이된다. 앞에 오는 모든 인수는 검색 경로이며 나머지 인수는 표현식의 나머지 부분입니다. 경로를 지정하지 않으면 현재 디렉토리가 사용됩니다. 표현식이 주어지지 않으면, 표현식 -print 가 사용됩니다.

모든 파일이 성공적으로 처리되면 find 명령은 상태 0으로 종료되고 오류가 발생하면 0보다 큰 상태로 종료됩니다.

표현식

표현식은 옵션 (특정 파일을 처리하는 것이 아니라 전체 작업에 영향을 미치고 항상 true를 반환), 테스트 (true 또는 false 값을 반환) 및 동작 (부작용이 있고 true 또는 false를 반환합니다. false 값)을 모두 연산자로 구분합니다. 표현식은 연산자가 생략 된 경우에 가정됩니다. 표현식에 -prune 이외의 조치가 없으면 표현식이 참인 모든 파일에 대해 -print 가 수행됩니다.

옵션

모든 옵션은 항상 true를 반환합니다. 표현의 위치에 도달 할 때만 처리되는 것이 아니라 항상 효과가 나타납니다. 따라서 명확하게하기 위해 식의 시작 부분에 두는 것이 가장 좋습니다.

-daystart 24 시간 전보다는 오늘 시작부터 시간을 측정하십시오 ( -amin, -atime, -cmin, -ctime, -mmin-mtime ).
-깊이 디렉토리 자체 앞에있는 각 디렉토리의 내용을 처리하십시오.
-따르다 기호 링크를 참조 해제하십시오. 암시 - 놀래프 .
-help 또는 --help find 와 exit의 명령 행 사용법에 대한 요약을 인쇄하십시오.
-maxdepth [번호] 명령 행 인수 아래에있는 대부분의 레벨 (음이 아닌 정수)의 디렉토리를 지정하십시오. -maxdepth 0 표현식은 테스트 및 조치를 명령 행 인수에만 적용한다는 것을 의미합니다.
-mindepth [번호] 숫자 (음이 아닌 정수) 미만의 레벨에서는 테스트 나 동작을 적용하지 마십시오. 표현식 -mindepth 1 은 명령 행 인수를 제외한 모든 파일을 처리하는 것을 의미합니다.
-산 다른 파일 시스템에 디렉토리를 내려 놓지 마십시오. 일부 다른 버전의 find 와의 호환성을 위해 -xdev 의 대체 이름.
노 릴레이프 디렉토리에 하드 링크 수보다 하위 디렉토리가 2 개 적은 것으로 가정하여 최적화하지 마십시오. *
-version 또는 --version 찾기 버전 번호를 출력하고 종료하십시오.
-xdev 다른 파일 시스템에 디렉토리를 내려 놓지 마십시오.

*이 옵션은 CD-ROM 또는 MS-DOS 파일 시스템 또는 AFS 볼륨 마운트 포인트와 같은 Unix 디렉토리 링크 규칙을 따르지 않는 파일 시스템을 검색 할 때 필요합니다. 일반적인 유닉스 파일 시스템의 각 디렉토리는 적어도 2 개의 하드 링크를 가지고있다 : 이름과 디렉토리 . (기간) 입력. 또한 하위 디렉토리 (있는 경우)에는 각각 해당 디렉토리에 연결된 항목이 있습니다.

find 가 디렉토리를 조사 할 때, 디렉토리의 링크 수보다 두 개의 하위 디렉토리가 적어지면 디렉토리의 나머지 항목이 디렉토리가 아닌 디렉토리 트리의 리프 파일임을 알게됩니다. 파일의 이름 만 검사해야하는 경우 통계를 확인할 필요가 없습니다. 검색 속도가 크게 향상됩니다.

테스트

숫자 인수는 다음과 같이 지정할 수 있습니다.

+ n n 보다 큰 경우 .
-엔 n 보다 적게 .
정확하게 n.
- 아민 n 파일은 n 분 전에 마지막으로 액세스되었습니다.
-anewer [파일] 파일이 수정 된 것보다 최근에 마지막으로 액세스되었습니다. -anewer는 -follow가 명령 행에서 -anewer 앞에 오는 경우에만 -follow의 영향을받습니다.
- 시간 n 마지막으로 n * 24 시간 전에 파일에 액세스했습니다.
-cmin n 파일의 상태가 N 분 전에 마지막으로 변경되었습니다.
-cnewer [파일] 파일의 상태가 파일이 수정 된 직전보다 최근에 변경되었습니다.
- cnewer 는 명령 행에서 -follow-cnewer 앞에 오는 경우 에만 -follow의 영향을받습니다.
-ctime n 파일의 상태가 n * 24 시간 전에 마지막으로 변경되었습니다.
-빈 파일이 비어 있으며 일반 파일이거나 디렉토리입니다.
-그릇된 항상 거짓.
-fstype [유형] 파일은 지정된 유형의 파일 시스템에 있습니다. 유효한 파일 시스템 유형은 Unix의 버전에 따라 다릅니다. 어떤 유닉스 버전에서 받아 들여지는 파일 시스템 유형의 불완전한리스트는 ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K이다. 파일 시스템의 유형을 보려면 % F 지시문과 함께 -printf를 사용할 수 있습니다.
-gid n 파일의 숫자 그룹 ID는 n 입니다.
-group [gname] 파일은 그룹 gname (허용 된 숫자 그룹 ID)에 속합니다.
-ilname [패턴] -lname과 같지만 대소 문자를 구분하지 않습니다.
-iname [패턴] -name 과 같지만 대소 문자를 구분하지 않습니다. 예를 들어, fo *F ?? Foo , FOO , foo , fOo 등의 파일 이름과 일치시킵니다.
-num 파일은 inode 번호 n 을가집니다.
-ipath [패턴] like -path 이지만 대소 문자를 구분하지 않습니다.
-iregex [패턴] -regex와 같지만 대소 문자를 구분하지 않습니다.
-links n 파일에 n 개의 링크가 있습니다.
-lname [패턴] 파일은 내용이 쉘 패턴과 일치하는 심볼릭 링크입니다. 메타 문자는 / 또는 처리하지 않습니다 . 특별히.
-mmin n 파일의 데이터가 n 분 전에 마지막으로 수정되었습니다.
- 시간 n 파일의 데이터가 n * 24 시간 전에 마지막으로 수정되었습니다.
-name [패턴] 파일 이름 (기본 디렉토리가 제거 된 경로)의 기본은 쉘 패턴과 일치합니다. 메타 문자 ( * , ? , [] )는 a와 일치하지 않습니다 . 기본 이름의 시작 부분에. 디렉토리와 그 아래의 파일을 무시하려면 -prune을 사용하십시오. -path 에 대한 설명의 예를 참조하십시오.
-newer [파일] 파일이 파일보다 최근에 수정되었습니다. -newer 라는 표현식은 -follow 가 명령 행에서 -newer 앞에 오는 경우 에만 -follow의 영향을받습니다.
- 부채 파일의 숫자 사용자 ID에 해당하는 사용자가 없습니다.
- 노 그룹 파일 그룹의 숫자 그룹 ID에 해당하는 그룹이 없습니다.
-path [패턴] 파일 이름이 쉘 패턴 패턴 과 일치합니다. 메타 문자는 / 또는 처리하지 않습니다 . 특별히; 그래서, 예를 들어, find. -path './sr*sc는 ./src/misc라는 디렉토리에 대한 항목을 인쇄합니다 (존재하는 경우). 전체 디렉토리 트리를 무시하려면 트리의 모든 파일을 검사하지 말고 -prune을 사용하십시오. 예를 들어 src / emacs 디렉토리와 그 아래의 모든 파일과 디렉토리를 건너 뛰고 발견 된 다른 파일의 이름을 출력하려면 다음과 같이하십시오 : find. -path './src/emacs'-prune -o -print
-perm [mode] 파일의 허가 비트는 정확히 [모드] (8 진수 또는 기호)입니다. 기호 모드는 모드 0을 출발점으로 사용합니다.
-perm -mode 모든 허가 비트 [mode] 가 파일에 설정됩니다.
- 퍼멀 + 모드 모든 허가 비트 [mode] 가 파일에 설정됩니다.
-regex [패턴] 파일 이름이 정규식 패턴 과 일치합니다. 이것은 검색이 아닌 전체 경로에서 일치합니다. 예를 들어 ./fubar3이라는 파일과 일치 시키려면 정규 표현식 . * bar를 사용할 수 있습니다 . 또는 . * b. * 3 , b. * r3이 아님.
- 크기 n [bckw] File은 n 단위의 공간을 사용합니다. 단위는 기본적으로 512 바이트 블록이거나 b가 n 뒤에 오고 , c가 n 다음이면 k 바이트, n 이 k 뒤에 오는 경우 KB, n이 n 뒤에 오는 경우 2 바이트 단어입니다. 크기는 간접 블록을 계산하지 않지만 실제로 할당되지 않은 스파 스 파일의 블록을 계산합니다.
-참된 항상 사실입니다.
타입 C 파일 유형이 c :
블록 (버퍼 됨) 특수
기음 캐릭터 (버퍼링되지 않은) 특수
예배 규칙서
명명 된 파이프 (FIFO)
에프 일반 파일
심볼릭 링크
에스 소켓
문 (Solaris)
- uid n 파일의 숫자 사용자 ID는 n 입니다.
- 사용 된 n 상태가 마지막으로 변경된 후 n 일 후 파일에 마지막으로 액세스했습니다.
-user uname 파일은 사용자 uname (숫자 사용자 ID 허용)이 소유합니다.
-xtype c 파일이 기호 링크가 아닌 경우 -type 과 동일합니다. 심볼릭 링크의 경우 : -follow 가 지정되지 않은 경우 파일이 c 유형의 파일에 대한 링크 인 경우 true이고, -follow 가 주어 졌을 경우, c 가 l 인 경우는 true 즉, 기호 링크의 경우,
-xtype-type 이 검사하지 않는 파일의 유형을 검사합니다.

행위

-exec 명령 ;

명령을 실행하십시오. 0 상태가 리턴되면 true. find에 대한 모든 후속 인수는`; '로 구성된 인수까지 명령에 대한 인수가됩니다. 마주 친다. 문자열`{} '는 일부 버전의 find 와 같이 혼자있는 인수가 아니라 명령 인수에 따라 처리되는 현재 파일 이름으로 대체됩니다. 이러한 구조는 쉘에 의한 확장으로부터 보호하기 위해 이스케이프 (`\ ') 또는 인용 부호가 필요합니다. 명령은 시작 디렉토리에서 실행됩니다.

-fls 파일

참된; -ls와 비슷하지만 -fprint와 같은 파일에 씁니다.

-fprint 파일

참된; 전체 파일 이름을 파일 파일 로 인쇄 하십시오 . find 가 실행될 때 file 이 없으면 파일 이 생성됩니다. 존재하지 않으면 잘립니다. 파일 이름``/ dev / stdout ''과``/ dev / stderr ''는 특별히 처리됩니다; 표준 출력과 표준 오류 출력을 각각 참조합니다.

-fprint0 파일

참된; -print0과 같지만 -fprint와 같은 파일에 쓰십시오.

-fprintf 파일 형식

참된; -printf와 같지만 -fprint와 같은 파일에 쓰십시오.

-ok 명령 ;

-exec와 비슷하지만 먼저 사용자에게 물어보십시오 (표준 입력에서). 응답이`y '또는`Y'로 시작하지 않으면 명령을 실행하지 않고 false를 반환합니다.

-인쇄

참된; 표준 출력에 전체 파일 이름을 인쇄 한 다음, 개행 문자를 출력하십시오.

-print0

참된; 표준 출력에 전체 파일 이름을 출력 한 다음, 널 문자를 출력하십시오. 이렇게하면 줄 바꿈이 포함 된 파일 이름을 찾기 출력을 처리하는 프로그램에서 올바르게 해석 할 수 있습니다.

-printf 형식

참된; `\ '이스케이프와`%'지시문을 해석하여 표준 출력에 형식 을 인쇄하십시오. 필드 너비와 정밀도는`printf 'C 함수와 같이 지정할 수 있습니다. -print와 달리 -printf는 문자열 끝에 개행을 추가하지 않습니다. 이스케이프 및 지시문은 다음과 같습니다.

\에이

알람 벨.

\비

역행 키이.

\기음

이 형식에서 즉시 인쇄를 중지하고 출력을 플러시하십시오.

\에프

양식 피드.

\엔

뉴 라인.

\아르 자형

캐리지 리턴.

\티

가로 탭.

\V

세로 탭.

\\

리터럴 백 슬래시 (`\ ').

\ NNN

ASCII 코드가 NNN (8 진수) 인 문자.

`\ '문자 다음에 다른 문자가 오는 문자는 일반 문자로 취급되므로 둘 다 인쇄됩니다.

%%

리터럴 퍼센트 기호.

%에이

파일의 마지막 액세스 시간은 C`ctime '함수가 반환 한 형식입니다.

% A k

마지막 액세스 시간은`@ '또는`strftime'함수의 지시어 인 k에 지정된 형식입니다. k에 가능한 값은 다음과 같습니다. 그 중 일부는 시스템 간의`strftime '의 차이로 인해 모든 시스템에서 사용 가능하지 않을 수 있습니다.

@

1970 년 1 월 1 일 00:00 GMT 이후로

시간 필드 :

H

시간 (00.23)

나는

시간 (01.12)

케이

시간 (0..23)

시간 (1..12)

분 (00.59)

로케일의 AM 또는 PM

아르 자형

시간, 12 시간 (hh : mm : ss [AP] M)

에스

초 (00 ... 61)

시간, 24 시간 (hh : mm : ss)

엑스

로켈의 시간 표현 (H : M : S)

시간대 (예 : EDT) 또는 시간대가 결정되지 않는 경우에는 아무 것도 표시되지 않습니다.

날짜 입력란 :

에이

로켈의 약식 요일 이름 (Sun..Sat)

에이

로케일의 전체 평일 이름, 가변 길이 (일요일 .. 일요일)

로캘의 약식 월 이름 (Jan..Dec)

로케일의 전체 월 이름, 가변 길이 (1 월 ... 12 월)

기음

로케일의 날짜와 시간 (1989 년 11 월 4 일 토요일 12시 2 분 33 초, 1989 년)

일 (01..31)

날짜 (mm / dd / yy)

h

b와 동일

j

일 (001..366)

월 (01.12)

주일의 첫 번째 요일로 일요일의 주 숫자 (00..53)

w

요일 (0..6)

주 월요일의 첫 번째 요일 (00.53)

엑스

로켈 날짜 표시 (mm / dd / yy)

와이

마지막 두 자리 숫자 (00..99)

와이

년 (1970 ...)

%비

파일 크기는 512 바이트 블록 (반올림)입니다.

%기음

파일의 마지막 상태 변경 시간은 C`ctime '함수가 반환 한 형식입니다.

% C k

파일의 마지막 상태 변경 시간은 k로 지정된 형식으로, % A와 동일합니다.

%디

디렉토리 트리에서 파일의 깊이; 0은 파일이 명령 행 인수임을 의미합니다.

%에프

주요 디렉토리가 제거 된 파일의 이름 (마지막 요소 만).

%에프

파일이있는 파일 시스템의 유형. 이 값은 -fstype에 사용할 수 있습니다.

%지

그룹의 이름이 없으면 파일의 그룹 이름 또는 숫자 그룹 ID입니다.

%지

파일의 숫자 그룹 ID.

% h

파일 이름의 선두 디렉토리 (마지막 요소를 제외하고).

% H

파일이 발견 된 명령 행 인수.

%나는

파일의 inode 번호 (십진수).

%케이

파일 크기는 1K 블록 (반올림)입니다.

%엘

심볼릭 링크의 객체 (파일이 심볼릭 링크가 아닌 경우 빈 문자열).

%엠

파일의 허가 비트 (8 진수).

%엔

파일에 대한 하드 링크의 수.

%피

파일의 이름.

%피

발견 된 명령 행 인수의 이름이있는 파일의 이름.

%에스

파일 크기 (바이트).

%티

파일의 마지막 수정 시간은 C`ctime '함수에 의해 반환 된 형식입니다.

% T k

파일의 마지막 수정 시간은 k로 지정된 형식으로, 이는 % A와 동일합니다.

%유

사용자의 이름이 없으면 파일의 사용자 이름 또는 숫자 사용자 ID입니다.

%유

파일의 숫자 사용자 ID.

'%'문자 다음에 다른 문자가 오는 것은 버려집니다 (그러나 다른 문자는 인쇄됩니다).

-치다

-depth가 주어지지 않으면 true; 현재 디렉토리를 내려 가지 않습니다.
-depth가 주어지면 false; 효과 없음.

-ls

참된; `ls -dils '형식의 현재 파일을 표준 출력에 나열하십시오. 환경 변수 POSIXLY_CORRECT가 설정되어 있지 않으면 블록 수는 1K 블록이며,이 경우 512 바이트 블록이 사용됩니다.

연산자

우선 순위가 낮은 순서대로 나열 :

( expr )

강제 우선 순위.

! expr

expr 이 거짓이면 참입니다.

--not expr

같은! expr .

expr1 expr2

그리고 (함축 된); expr1 이 false이면 expr2 는 평가되지 않습니다.

expr1 -a expr2

expr1 expr2 와 동일합니다.

expr1expr2

expr1 expr2 와 동일합니다.

expr1 -o expr2

또는; expr1 이 참이면 expr2 는 평가되지 않습니다.

expr1 - 또는 expr2

expr1 -o expr2 와 동일합니다.

expr1 , expr2

명부; expr1expr2 는 항상 평가됩니다. expr1 의 값은 버려집니다. 목록의 값은 expr2 의 값입니다.

예제들

find / home -user joe

사용자 joe가 소유 한 / home 디렉토리 아래의 모든 파일을 찾으십시오.

find / usr -name * stat

/ usr 디렉토리에서 ".stat"로 끝나는 모든 파일을 찾으십시오.

/ var / spool -mtime +60 찾기

60 일 이상 전에 수정 된 / var / spool 디렉토리 아래의 모든 파일을 찾으십시오.

find / tmp -name core -type f -print | xargs / bin / rm -f

/ tmp 디렉토리 또는 그 아래에있는 core 파일을 찾아 삭제하십시오. 줄 바꿈, 작은 따옴표 또는 큰 따옴표 또는 공백이 포함 된 파일 이름이 있으면이 작업이 잘못 수행됩니다.

/ tmp -name core -type f -print0을 찾으십시오. xargs -0 / bin / rm -f

/ tmp 디렉토리 또는 그 아래에있는 core 파일을 찾아서 삭제하고 작은 따옴표, 큰 따옴표, 공백 또는 개행을 포함하는 파일이나 디렉토리 이름이 올바르게 처리되도록 파일 이름을 처리합니다. -name 테스트는 모든 파일에서 stat (2) 를 호출 할 필요가 없도록 -type 테스트 앞에옵니다.

찾아라. -t f -exec 파일 '{}'\;

현재 디렉토리 아래의 모든 파일에서`file '을 실행합니다. 중괄호는 쉘 스크립트 구두점으로 해석되지 않도록 작은 따옴표로 묶습니다. 세미콜론은 백 슬래시를 사용하여 비슷하게 보호되지만 ';' 이 경우에도 사용할 수있었습니다.

\ - (-perm -4000 -fprintf /root/suid.txt '% # m % u % p \ n'\), \ \ (-size + 100M -fprintf /root/big.txt '% -10s % p \ n '\)

setuid 파일과 디렉토리를 /root/suid.txt에 나열 하고 큰 파일을 /root/big.txt에 나열하면 파일 시스템을 한 번만 탐색하십시오 .

$ HOME -mtime 0을 찾는다.

지난 24 시간 동안 수정 된 홈 디렉토리의 파일을 검색하십시오. 이 명령은 각 파일을 마지막으로 수정 한 이후의 시간을 24 시간으로 나누고 나머지는 버려지기 때문에이 방법으로 작동합니다. 즉, -mtime 과 일치하는 것을 의미합니다.

0 일 경우, 파일은 24 시간 이전의 수정이 있어야합니다.

찾아라. - 페르마 664

소유자 및 그룹에 대해 읽기 및 쓰기 권한이 있지만 다른 사용자가 읽을 수는 있지만 쓸 수는없는 파일을 검색하십시오. 이 기준을 만족하지만 다른 사용 권한 비트가 설정된 파일 (예 : 누군가가 파일을 실행할 수있는 경우)은 일치하지 않습니다.

찾아라. - 정자 -664

추가 권한 비트 (예 : 실행 비트)의 존재 여부에 관계없이 소유자 및 그룹에 대해 읽기 및 쓰기 권한이 있고 다른 사용자가 읽을 수있는 파일을 검색하십시오. 예를 들어, 0777 모드를 가진 파일과 일치합니다.

찾아라. - 퍼먼 / 222

누군가 (소유자 또는 그룹 또는 다른 사람이) 쓸 수있는 파일을 검색하십시오.

찾아라. -perm / 220 찾기. -perm / u + w, g + w를 찾습니다. -perm / u = w, g = w

이 세 명령은 모두 같은 작업을 수행하지만 첫 번째 명령은 파일 모드의 8 진 표현을 사용하고 다른 두 명령은 기호 형식을 사용합니다. 이 명령은 모두 소유자 또는 그룹이 쓸 수있는 파일을 검색합니다. 파일은 일치시킬 소유자와 그룹 모두에 의해 쓰기가 가능할 필요는 없습니다. 둘 중 하나가됩니다.

찾아라. -perm -220 찾기. -perm -g + w, u + w

이 두 가지 명령 모두 똑같은 일을합니다. 소유자와 그룹이 모두 쓸 수있는 파일을 검색하십시오.

찾아라. -perm -444 -perm / 222! -perm / 111 찾기. -perm -a + r -perm / a + w! -perm / a + x

이 두 명령은 모두 (-perm -444 또는 -perm -a + r) 읽을 수있는 파일을 검색하고 최소한 쓰기 비트 세트 (-perm / 222 또는 -perm / a + w)를 갖지만 실행 가능하지 않은 파일을 검색합니다 누구나 (! -perm / 111 및! -perm / a + x 각각)

중요 : man 명령 ( % man )을 사용하여 특정 컴퓨터에서 명령이 어떻게 사용되는지보십시오.