Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

Linux에서 명령 찾기 [유용한 예 포함]

찾기 Linux 셸의 명령을 사용하면 파일 시스템에서 파일을 검색할 수 있습니다. 이름, 사용자 권한 및 크기별로 파일을 찾을 수 있습니다. 찾기 명령은 발견된 파일에 대해 작업을 수행할 수도 있습니다.

명령 구문 찾기

찾기 구문 명령은 다음과 같습니다.

find [OPTIONS] [PATH] [EXPRESSION]

어디에:

  • [옵션] 찾기 동작을 결정하기 위한 아래 표의 옵션입니다.
  • [경로] 검색의 시작점입니다.
  • [표현] 일치하는 파일을 찾기 위한 테스트 및 발견된 파일에 대해 수행해야 하는 모든 작업을 정의합니다.

옵션

일반적으로 사용되는 옵션은 다음과 같습니다. 찾기를 위해 명령, 매뉴얼에서 수정:

<일>
-P 심볼릭 링크를 절대 따라가지 마세요. 이것이 기본 동작입니다.
-L 심볼릭 링크를 따르십시오. find가 파일에 대한 정보를 검사하거나 인쇄할 때 사용되는 정보는 링크 자체가 아니라 링크가 가리키는 파일의 속성에서 가져옵니다.
-H 명령줄 인수를 처리하는 동안을 제외하고는 심볼릭 링크를 따르지 마십시오.

표현식

찾기에서 다음과 같은 몇 가지 일반적인 진술 EXPRESSION, 빌드에 사용할 수 있는 설명서 일치하는 파일을 테스트하고 선택적으로 작업을 수행하는 항목:

<일>
테스트(검색 조건)
-비어 있음 빈 파일 찾기
-실행 가능 실행 가능하고 검색 가능한 디렉토리와 일치하는 파일
-그룹 이름 파일이 이름인 그룹에 속해 있습니다.
-mtime n 파일 데이터가 마지막으로 수정된 지 n*24시간 미만, 이후 또는 정확히 n*24시간 전
-이름 패턴 파일 이름의 기준(선행 디렉토리가 제거된 경로)은 패턴 패턴과 일치합니다.
-경로 패턴 파일 경로가 패턴 패턴과 일치함
가독성 현재 사용자가 읽을 수 있는 파일과 일치
-크기 n 파일은 반올림하여 n개보다 작거나 크거나 정확히 n 단위의 공간을 사용합니다(사용 가능한 단위는 아래 표 참조).
-유형 c 파일 유형은 c입니다. (c 값은 아래 표를 참조하세요. )
-사용자 이름 파일은 이름이(가) 소유합니다. 사용자
<일>
작업
-인쇄 파일 이름 출력(기본 동작)
-정리 Ff 파일이 디렉토리라면 그 디렉토리로 내려가지 마세요
-깊이 디렉토리 자체보다 먼저 각 디렉토리의 내용을 처리합니다.
-삭제 일치하는 파일을 삭제합니다. -delete 작업은 옵션처럼 작동합니다(-depth를 의미하기 때문에)
-exec 명령 명령 실행
-execdir 명령 -exec와 비슷하지만 지정된 명령은 일치하는 파일이 포함된 하위 디렉터리에서 실행됩니다.
-ok 명령 -exec와 비슷하지만 사용자에게 먼저 물어보세요.
-okdir 명령 -execdir과 비슷하지만 -ok와 같은 방식으로 사용자에게 먼저 물어보세요.
-printf 형식 형식으로 파일 세부정보 인쇄

표현식의 연산자

연산자를 사용하여 표현식에서 항목을 연결할 수 있습니다.

<일>
-o 또는
-a AND(연산자가 제공되지 않은 경우 표현식 사이의 기본 연산자

파일을 찾기 위한 전체 옵션 및 표현식 목록을 보려면 다음을 실행할 수 있습니다.

man find

명령 예제 찾기

옵션, 표현식 및 작업을 결합하여 일치하는 파일을 나열하는 간단한 찾기 작업 또는 복잡한 조건으로 파일을 찾고 작업을 수행할 수 있는 복잡한 작업을 만들 수 있습니다. 예는 아래를 참조하십시오.

파일 이름으로 파일 찾기

이 예는 myfile이라는 이름의 모든 파일을 찾습니다. /home/screw 디렉터리에서 :

find /home/screw -name myfile

유형별 검색

위의 명령은 일치하는 모든 파일(포함 포함)을 반환합니다. 디렉토리, 링크 및 장치 - 파일 시스템의 모든 것.

-유형 f 표현식은 검색을 파일로 제한합니다. 뿐. myfile이라는 파일을 검색하려면 :

find /home/screw  -type f -name myfile

또는 디렉토리만 검색:

find /home/screw  -type d -name myfile

사용 가능한 유형은 다음과 같습니다.

<일>
b 차단(버퍼된) 특수
문자(버퍼되지 않은) 특수
d 디렉토리
p 명명된 파이프(FIFO)
f 일반 파일
심볼릭 링크; -L 옵션이나 -follow 옵션이 유효한 경우, 심볼릭 링크가 끊어지지 않는 한 이것은 절대 사실이 아닙니다.
s 소켓

대소문자 구분

-이름 옵션은 대소문자를 구분합니다. 대소문자를 구분하지 않고 검색하려면 -iname을 사용하세요. :

find /home/screw -iname mYFiLe

와일드카드 및 정규식을 사용하여 확장자로 파일 찾기

와일드 카드를 사용할 수 있습니다. (* ) 파일 확장자로 검색할 수 있는 파일 이름:

find -L /home/screw -name '*.pdf'

위는 .pdf가 있는 모든 파일을 검색합니다. 확대. 인용된 검색 패턴에는 정규식이 포함될 수 있습니다.

이름 또는 확장자로 파일 생략

-아님 연산자를 사용하여 이름이나 패턴으로 파일을 생략하고 일치하지 않는 모든 결과를 반환할 수 있습니다.

find /home/screw -type f -not -name '*.pdf'

결과에서 전체 디렉토리 생략

-prune 사용 일치하는 경로와 해당 내용을 생략하는 옵션입니다. 아래 예에서는 /home/screw/junk를 생략합니다. 결과의 디렉토리:

find /home/screw -path /home/screw/junk -prune -o -print

크기별로 파일 검색

이 예는 500KB 미만의 모든 파일을 검색합니다.

find /home/screw -type f -size -500k

이것은 두 가지 크기 조건을 전달하여 100에서 200KB 사이의 파일을 찾습니다.

find /home/screw -type f -size +100k -size -200k

크기별로 검색할 수 있는 단위는 다음과 같습니다.

<일>
b 512바이트 블록(접미사가 사용되지 않는 경우 기본값)
바이트
w 2바이트 단어
k 키비바이트(KiB, 1024바이트 단위)
메비바이트(MiB, 1024 * 1024 =1048576바이트 단위)
기비바이트(GiB, 1024 * 1024 * 1024 =1073741824바이트 단위)

수정 또는 액세스 날짜

다음 예는 모든 .txt를 찾습니다. 지난 14일 동안 수정된 파일:

find /home/screw -name '*.txt' -mtime 14

마지막 액세스로 검색하려면 수정 대신 날짜, -time 사용 -mtime 대신 옵션 .

기호(+ 또는  ) 지정된 간격보다 크거나 작게 수정된 파일 검색 - 이 예에서는 14일 이상 전에 수정된 파일을 반환합니다.

find /home/screw -name '*.txt' -mtime +14

시간 단위로 일 대신 분을 사용하려면 -mmin으로 대체할 수 있습니다. -아민 -mtime 대신 및 -atime .

평소와 같이 믹스 앤 매치할 수 있는 훨씬 더 많은 옵션이 있으며, 모두 매뉴얼에서 사용할 수 있으며 다음을 실행하여 사용할 수 있습니다.

man find

소유자 사용자/그룹

/home/screw에서 루트가 소유한 모든 파일을 찾으려면 디렉토리, 실행:

find /home/screw -user root

권한

다음 명령은 전역 읽기/쓰기 권한이 있는 모든 파일을 찾습니다.

find /home/screw -perm 777

chmod에 대한 기사를 참조하세요. 명령과 그 기능.

조합

검색 표현식의 모든 조합을 사용할 수 있습니다. 그들 사이에 연산자가 포함되지 않은 경우 파일이 일치하려면 두 조건이 모두 충족되어야 한다고 가정합니다(즉, AND 연산자가 기본값임).

이 예는 지난 14일 동안 500kb 미만으로 생성된 모든 텍스트 파일을 검색합니다.

find /home/screw -name '*.txt' -mtime 14 -type f -size -500k

찾은 파일에 대한 작업

기본적으로 find 명령은 찾기 작업 결과를 인쇄합니다(-print 액션).

find /home/screw -name myfile -print

결과 형식 사용자 정의

발견된 파일에 대한 추가 정보를 포함하도록 결과 출력을 사용자 정의할 수 있습니다. 이 예는 파일 이름, 대시, 파일 크기(바이트)를 인쇄합니다.

find /home/screw -name '*.txt' -printf '%f - %s bytes'

파일 크기에서 파일 수정 및 액세스 시간에 대한 개별 날짜 필드에 이르기까지 많은 변수를 사용하여 출력을 사용자 정의할 수 있습니다. 전체 목록은 설명서를 확인하십시오.

파일에 결과 쓰기

찾기 결과 리디렉션 텍스트 파일로 작업:

find /home/screw -name myfile > find_results.txt

삭제

-삭제 action은 일치하는 파일을 삭제합니다(확인 없이 있으므로 주의하십시오!):

find /home/screw -name '*.junk' -delete

-exec로 명령 실행 / *-execdir *

찾기에 대해 모든 셸 명령을 실행할 수 있습니다. -exec를 사용한 결과 액션:

find /home/screw -name '*.txt' -exec ls -la {} ';'

-실행 현재 작업 디렉토리에서 명령을 실행합니다. 찾은 파일의 위치에서 명령을 실행하려면 -execdir을 사용하세요. 대신:

find /home/screw -name '*.txt' -execdir ls -la {} ';'

위의 두 예에서 ls -la 각 결과에 대해 실행됩니다. 중괄호 {} find 명령어 결과로 대체되며, ';' ls에 대한 명령줄 인수를 종료합니다. 찾을 명령 끝이 어디인지 알고 있습니다.

-ok로 확인 메시지 표시 / -okdir

-알았어 작업은 -exec와 동일하게 작동합니다. 동작하지만 주어진 명령을 실행하기 전에 묻습니다. 이것은 파일을 삭제하고 싶지만 각 파일이 삭제되기 전에 요청하는 경우에 유용합니다.

find /home/screw -name '*.txt' -ok rm {} ';'

-okdir 또한 발견된 파일의 위치에서 명령을 프롬프트하지만 실행합니다.

find /home/screw -name '*.txt' -okdir rm {} ';'