본문 바로가기
  • ▒ 네모의 쉽게 배우는 네트워크 | 개발 ▒
리눅스(Redhat)/유용한 명령어

find -exec 명령어 뒤에 \; 와 +의 차이 구분

by 너l모 2023. 9. 19.
반응형

※ 업무하면서 습득한 내용들을 정리해 놓은 포스팅입니다 :P 추가로 궁금하신 점은 댓글로 남겨주시고 필요한 자료 있으면 요청주세요! 잘못된 내용이 있으면 고쳐주시면 감사하겠습니다. 자료 퍼가실 때는 출처 남겨주세요!


 ο 목차

     


    ※ 코드 보는 방법 참고

    ㅇ 달러 기호($)가 있는 경우 -> 리눅스 터미널에서 CLI 명령어 입력

    ㅇ "=#" 기호가 있는 경우 -> psql 쉘에서 명령어 입력

    ㅇ 꺽쇠가 하나 있는 경우(>) -> 윈도우 명령 프롬프트(cmd)에서 명령어 입력

    ㅇ 꺽쇠가 세개 있는 경우(>>>) -> python 쉘에서 명령어 입력


    1. find -exec 명령어 기본 형식

    $ find 찾을경로 기타옵션들 -exec 명령어 {} 구분자

     1) 찾을경로

        - 지정되지 않는 경우 현재 디렉토리 및 하위 디렉토리 검색(default)

        - 찾을경로가 옵션보다 먼저 사용되어야 하기 때문에  "find 기타옵션들 찾을경로" 형식으로 명령어를 사용하지 않도록 주의(!!!오류 발생!!!)

     

     2) 기타옵션들

        -  name, type, user 등 특정 종류의 파일을 필터링 하기 위한 옵션

     

    2. exec 옵션이란?

    find 명령어의 옵션 중 하나로 find 명령어를 통해 찾은 파일 혹은 디렉터리에 일괄적으로 특정 작업을 해주기 위한 명령어

     

    3. exex 옵션의 {} 란? 

    placeholder라고 하는데, 쉽게 말하면 find 명령어를 통해 찾은 결과물을 놓을 자리를 의미

     

    4. exec 옵션의 \; 혹은 + 란?

    구분자로 -exec 옵션을 통해 입력한 명령어의 끝을 명시적으로 find 명령어에게 알려주는 역할

     

    다만 \; 와 + 구분자는 의미가 조금 달라서 상황에 맞게 구분해서 사용해야 합니다. 

     

    간단하게 설명하자면

    1) \; 구분자는 찾은 모든 파일 개수만큼 명령어를 반복 실행

    2) + 구분자는 찾은 모든 파일을 하나의 명령어에 넣고 실행

     

    잘 이해가 안되는 분들을 위해 아래에서 세부적인 예시를 들어보겠습니다. 

     

    5. \; 구분자를 사용하는 경우 예시

    1) 코드 예시 

    $ find -user root -type f -name "*.jsp" -exec rm -rf {} \;

    => a.jsp, b.jsp, c.jsp 라는 파일이 있다고 가정

    2) 명령어 수행 동작

        {} 가 있는 자리에 a.jsp, b.jsp, c.jsp를 넣어 각 파일에 대해 명령어를 파일 개수만큼 실행

    rm -rf a.jsp
    rm -rf b.jsp
    rm -rf c.jsp

        => rm -rf  명령어를 총 세 번 반복

     

    6. + 구분자를 사용하는 경우 예시

    1) 코드 예시

    $ find -user root -type f -name "*.jsp" -exec rm -rf {} +

    2) 명령어 수행 동작

        {} 가 있는 자리에 a.jsp, b.jsp, c.jsp를 한줄에 입력후 명령어를 한번 수행 

    rm -rf a.jsp b.jsp c.jsp

     

    명령어를 한번만 수행해도 되는 경우라면 +를 사용하되, 명령어 별로 한번씩 수행해야 하는 경우에는 \;를 써주는 것이 작업 효율에 도움이 됩니다 :D

     

    이 포스팅이 도움이 되셨다면 좋아요 부탁드려요~!ㅎㅎ 감사합니다


    ※ 좋아요와 구독은 큰 힘이 됩니다. 감사합니다. 

    반응형

    댓글