저는 이들의 차이점을 이해하려고합니다. 두 개의 명령 :

sudo find / -name .DS_Store -delete 

sudo find / -name ".DS_Store" -exec rm {} \; 

-exec ... {} 방법이 선호됩니다. 그 이유는 무엇입니까? 어느 것이 더 안전하고 / 빠르며 / 더 나은가요? Macbook 에서 둘 다 사용했는데 모든 것이 잘 작동하는 것 같습니다.

Answer

-delete는 각각에 대해 외부 프로세스를 생성 할 필요가 없기 때문에 더 나은 성능을 발휘합니다. 및 일치하는 모든 파일.

-delete가 존재하지 않기 때문에 -exec rm {} \;가 자주 권장되는 것을 볼 수 있습니다. find의 모든 버전입니다. 지금은 확인할 수 없지만이 파일 없이는 find를 사용했다고 확신합니다.

B 다른 방법은 “안전”해야합니다.

@doitmyway의 댓글 당 편집 : 일치하는지 확인하세요. 이름에 입력하고 그런 다음 삭제합니다. 그 반대는 아닙니다 (삭제 후 일치). 그렇지 않으면 일치 여부에 관계없이 모든 파일이 삭제됩니다 . 즉, 하지 마십시오 : find / -delete -name .DS_Store.

일치하는 각 파일에 대해 외부 프로세스를 생성하는 오버 헤드를 피하는 일반적인 방법은 다음과 같습니다.

find / -name .DS_Store -print0 | xargs -0 rm 

(하지만 여기에도 이식성 문제가 있습니다. 모든 버전의 find에 -print0!)

댓글

  • 알겠습니다. '도 -delete 스위치를 사용하여 -name 지정된 파일 트리를 삭제한다는 것을 읽었습니다. 이므로주의해야합니다.
  • 최근 find에서는 -exec rm {} +를 사용하여 일치하는 항목을 모두 제거 할 수 있습니다. 단일 rm 명령이있는 파일.
  • .DS_Store는 ' 특수 문자가 전혀 포함되어 있지 않으므로 따옴표가 필요하지 않으며이 경우에는 아무것도 변경하지 않습니다.
  • 기본적으로 공백 (공백, 탭 등) 만 따옴표없는 문자열을 다음과 같이 해석하는 유일한 원인입니다. 두 개의 개별 명령 줄 인수가 있지만 ' 인용 여부를 결정할 때 죄송합니다. ; 또는 | 또는 > 모든 셸 메타 문자에 대해 걱정해야합니다.

또는 < 및“및 따옴표가없는 한 셸에 특별한 의미가있는 다른 많은 것.

  • @MarcoMarsala xargs는 제한된 크기의 인수 목록 문제를 여러 명령 호출로 분할하여 투명하게 처리합니다.
  • Answer

    .DS_Store가 디렉토리가 아니라 파일을 나타낸다고 가정 할 때 가장 이식 가능한 가장 빠른 방법은 다음과 같습니다.

    sudo find / -name .DS_Store -exec rm {} + 

    유일한 위험은 sudo를 사용할 수 없다는 것입니다.하지만 요즘은 상당히 낮습니다.

    -delete 옵션은 GNU 찾기를 요구하는 데 사용되며 다른 많은 find 구현에서는 여전히 표준이 아니므로 항상 사용할 수있는 것은 아닙니다.

    명령 종료 + in \; 대신 exec 절을 각각에 대해 rm 명령을 실행하지 않음으로써 파일 시스템에있는 모든 .DS_Store

    답변

    당신의 맥북으로서 당신은 두 명령 사이의 성능에서 큰 차이를 찾지 못할 것입니다. 그러나 -exec 버전을 살펴보면 미묘한 차이를 볼 수 있습니다.

    sudo find / -iname ".file-to-delete" -exec rm {} \; 

    이것은 이름이 “.file 인 모든 파일을 찾을 수 있음을 의미합니다. -지우는 것”. 그러나이 검색은 원치 않는 오 탐지를 반환 할 수 있습니다. sudo로 무언가를 할 때는 좀 더 조심해야합니다. -exec rm {} 사용의 장점은 다음과 같이 rm에 인수를 전달할 수 있다는 것입니다.

    sudo find / -iname "*~" -exec rm -i {} \; 

    이 예에서는 다음과 같은 백업 파일을 제거하고 싶습니다. emacs가 만듭니다. 그러나 그 물결표는 내가 알지 못하며 중요 할 수있는 일부 모호한 파일에있을 수 있습니다. 또한 삭제를 확인하고 싶습니다. 따라서 rm 명령에 “-i”옵션을 입력합니다. 이렇게하면 대화식 삭제가 수행됩니다. .

    또한 rm 사용을 조정하여 디렉토리와 파일을 삭제할 수 있습니다.

    find /usr/local/share/ -iname "useless" -exec rm -r {} \; 

    간단히 말하면 -exec는 발견 된 항목을 제거하는 실제 명령을 조금 더 제어 할 수 있습니다. 장점은 하나의 도구를 사용하여 파일을 찾고 다른 도구를 사용하여 파일을 제거한다는 것입니다.또한 모든 버전의 찾기 유틸리티에 -delete 옵션이있는 것은 아닙니다. 따라서 적절한 작업을 위해 각 도구를 사용하는 것이 좋습니다. 이것이 유닉스 철학입니다. 하나의 도구, 하나의 작업으로 필요한 작업을 함께 사용합니다.

    댓글

    • iv 참조 대화식 확인을 위해 -exec rm {} \; 대신 id = “ecc4fb1268″>

    .

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다