명령행을 사용하여 찾는 방법

명령줄find을 사용하는 방법을 알면 파일과 디렉토리를 빠르게 검색할 수 있습니다.소개할 내용은 다음과 같습니다.
  • Why Learn Find
  • Syntax and Patterns
  • Find by Name
  • Find by Path
  • Or
  • Not
  • Find File / Directory Only
  • Regex
  • Find by Size
  • Execute Command Line
  • Conclusion
  • Resources
  • 왜 찾다


    왜 우리는 찾는 것을 배워야 합니까?우리는 ripgrep, ag 같은 도구만 사용하거나 GUI를 수동으로 탐색할 수 없습니까?
    다음은find의 몇 가지 장점입니다.
  • 대부분의 터미널에서 찾을 수 있습니다.
  • GUI에서 검색하면 지루하고 필터링하기 어려울 수 있습니다.
  • ripgrep와ag는find보다 더 좋은 기능을 가지고 있을 수 있지만 보편적으로 사용할 수 있는 것은 아니다.원격 서버를 사용하면 find 더 편리할 수 있습니다.
  • 너는 모든 기능을 배워서 효율을 높일 필요가 없다. 단지 중요한 기능을 배우기만 하면 된다.나는 파르토리코의 원칙(80/20법칙)이 여기에 적용된다고 믿는다. 학습find 기능의 20%는 80%의 용례를 커버해야 한다.

    구문 및 패턴


    다음은 기본 구문입니다.
    find location options
    
    95-99%의 사용률에 대해 저는 .을 위치(현재 디렉터리)로 사용합니다.find 현재 디렉토리를 시작 경로로 사용하고 검색을 반복합니다.절대 또는 상대 경로 위치(예: /Users/iggy/projects/ 또는 ./projects를 사용할 수 있습니다.
    우리 선택에 대해 이야기합시다.두 가지 중요한 옵션은 -name-path입니다.나는 네가 이 두 사람에게서 많은 비슷한 점을 얻을 수 있다고 생각한다.이름과 경로를 설명할 때 기본 모드: [, ], *, ?-name(더 많은 모드)를 사용할 수 있습니다.그것들은 정규 표현식이 아니므로 주의하십시오.나는 잠시 후에 설명할 것이지만, 단지 기억하고 싶을 뿐이다.
    모드에 대한 자세한 내용은 this out를 참조하십시오.

    이름별 찾기

    * 옵션은 경로 이름의 마지막 구성 요소를 나타냅니다."model.rb"이름이 포함된 모든 파일을 검색하려면:
    find . -name "model.rb"
    
    이것은'모델.rb'와 완전히 일치하는 모든 내용을 되돌려줍니다.그러나 "user model.rb"또는 "address model.rb"를 검색하고 싶다면?"model.rb"를 포함하는 모든 내용을 찾으려면 0자 이상의 문자와 어댑터 -name 모드를 사용할 수 있습니다.
    find . -name "*model.rb"
    
    주소라는 단어가 포함된 모든 컨텐트를 찾으려면 다음과 같이 하십시오.
    find . -name "*address*"
    
    참고: ./src/components/address/ 파일 이름은 표시되지 않습니다.디렉터리 이름을 되돌릴 수 있습니다.만약 내가 주소 디렉터리 ((find) 가 있다면, -name 도 이 디렉터리로 돌아올 것이다.

    경로별 찾기

    -path 검색 경로 이름의 마지막 구성 요소를 회상해 보십시오.경로의 모든 내용을 검색하려면 /을 사용합니다.
    디렉터의 모든 파일/디렉토리 찾기
    find . -path "*controllers*"
    
    겸사겸사 한마디 하자면, 네가 원한다면
    find . -path "*controllers"
    
    디렉터 디렉토리만 반환됩니다.
    Find는 슬래시?를 일반 문자로 취급합니다.클라이언트/구성 요소를 전문적으로 찾는 경우:
    find . -path "*client/components*"
    
    클라이언트와 구성 요소를 포함하는 모든 경로를 되돌려줍니다.
    '모델', '모듈', '모델' 을 검색하려면 ? 문자와 일치할 수 있습니다.
    find . -path "*mod??"
    
    이것은 "mod"와 일치하며, 그 다음에 임의의 두 문자 (모델/modal/modes) 와 일치합니다.기억해라. ? 는 정규 표현식 모드가 아니다. (정규 표현식 [...] 에서 0 이상을 나타낸다.여기서는 모든 문자를 가리킨다.
    모델이나 모드만 검색하려면 다음과 같이 하십시오.
    find . -path "*mod[ae]l"
    
    [a-z] 포함된 문자와 정확히 일치합니다.또한 유사한 범위[A-Z], [0-9] 또는 [a-zA-Z0-9]를 제공할 수 있습니다.이 범위^를 혼합할 수도 있습니다.
    "modalA", "modalB"가 있다면..."modalZ"및 "modal0", "modal1"..."modal9"- a-z 접미사가 있는 경로만 되돌려줍니다 (숫자를 검색하지 않으려면):
    find . -path "*modal[^0-9]"
    
    [...][]의 첫 번째 문자로 추가하면 find의 일치가 부정됩니다.이것은'0-9로 끝나는 모형을 제외한 모든 것을 달라'는 뜻이다.

    혹은


    A 또는 B를 검색하려면 -oremail.rb 옵션이 있습니다.
    find . -name "*email*" -or -name "*address*"
    
    그러면 전자 메일 또는 주소가 검색됩니다.이름이나 경로 같은 모든 옵션을 혼합하고 일치시킬 수 있습니다.괄호를 사용하여 조건을 그룹화할 수도 있습니다.
    find . -name "*email.rb" -or \( -path "*deserializers*" -name "*address*" \)
    
    이렇게 하면 다음이 검색됩니다.
  • 또는
  • 로 끝나는 파일
  • 경로에'반서열화 프로그램'이 포함된 파일/디렉터리, 이름address.
  • 아니오.


    만약 우리가 "주소"를 제외한 모든 내용을 검색하고 싶다면?수락-not을 찾으면 다음을 수행할 수 있습니다.
    find . -not -name "*address*"
    
    순서를 기억하는 것이 중요하다.-not 뒤에 옵션이 있어야 합니다.find . -name -not "*address*"-not-name 뒤에 놓여 있기 때문에 효과가 없다.
    우리도 !로 대체할 수 있다-not.

    파일/디렉토리만 찾기


    지금까지, 우리가 검색했을 때, 우리는 디렉터리에 있는 임의의 파일의 결과를 얻었다.만약 우리가 파일이나 디렉터리만 검색하고 싶다면?
    우리는 -type 옵션을 사용하여 필터를 할 수 있다.
  • 디렉토리용 -type d
  • 파일의 경우 -type f
  • 더 많은 파일 유형(블록 특수, 문자 특수, 기호 링크, FIFO, 소켓)이 있지만 파일과 디렉터리는 가장 많이 사용되는 두 가지라고 생각합니다.
    경로에 "모델"이 포함된 모든 파일을 찾으려면 다음이 필요합니다.
    find . -type f -path "*model*"
    
    "모델"이라는 단어가 포함된 경로의 모든 디렉토리를 검색하려면 다음을 수행합니다.
    find . -type d -path *model*
    

    정규 표현식


    찾기에도 적용-regex 옵션:
    find . -regex ".*address.rb"
    
    정규 표현식을 사용할 때 find 전체 상대 경로와 일치합니다.이것은find가 상대 경로(./와 일치하는 결과를 되돌려준다는 것을 의미한다. 예를 들어:
    ./src/client/whatever.js
    ./src/client/frontend/
    ./server.js
    
    정규 표현식을 설명할 때 이 모드를 기억하십시오.

    크기별로 찾기


    파일 크기에 따라 파일을 찾을 수 있습니다(반올림 512b).
    find . -size +1M
    
    1MB 이상의 파일을 찾습니다.
    다음은 find 허용되는 다양한 파일 크기 옵션입니다.
    k   kilobytes   (1024 bytes)
    M   megabytes   (1024 kilobytes)
    G   gigabytes   (1024 megabytes)
    T   terabytes   (1024 gigabytes)
    P   petabytes   (1024 terabytes)
    

    명령행 실행


    때때로 파일만 찾는 것만으로는 부족하다.때때로 우리는 검색 결과에서 명령행 명령을 실행해야 한다.Find에는 -exec 명령이 있습니다.몇 가지 예를 살펴보겠습니다.
    find . -name "*model.rb" -exec cat {} ";"
    find . -type d -path "*model*" -exec ls -l {} ";"
    
    여러 집행관을 연결할 수 있습니다
    find . -name "*model.rb" -exec grep -q to_hash {} ";" -exec cat {} ";"
    
    이것은 검색 경로의 마지막 구성 요소에 '모델.rb' 를 포함하는 모든 결과를 포함하고grep ((-q 를 조용히 실행해서 'to hash' 문자열을 포함하는 줄을 찾은 다음 cat 이 파일들을 찾습니다.-exec는 유용한 학습 기능이다.-exec에 대한 자세한 내용은 다음 자료를 참조하십시오.
  • Linux shell, how to use the exec option in find with examples
  • find -exec with multiple commands
  • Understanding the -exec option of find
  • 결론


    나는 이것이 멈추기에 좋은 곳이라고 생각한다.이 지식들은 너로 하여금 일을 시작하게 하고 효과가 있을 것이다.내가 추천한 man find로는 턱없이 부족하다.더 유용한 선택이 많은데, 나는 여기서 언급하지 않았다.다른 명령행을 시도해 보고 매일 사용하라. 더 중요한 것은 즐겁게 노는 것이다!
    읽어주셔서 감사합니다.즐거운 코딩!

    리소스

  • man find
  • How do I find a file by filename in Mac OSX terminal?
  • Find Command: File Path vs -name Argument
  • Shell Pattern Matching
  • How to use regex with find command?
  • 좋은 웹페이지 즐겨찾기