답변:
-delete
일치하는 모든 파일에 대해 외부 프로세스를 생성하지 않아도되므로 성능이 향상됩니다.
의 모든 버전에이 (가) 존재하지 않기 -exec rm {} \;
때문에 권장되는 경우가 종종 있습니다 . 나는 지금 확인할 수는 없지만 그것을 사용하지 않았다고 확신 합니다.-delete
find
find
두 방법 모두 "안전"해야합니다.
@doitmyway의 의견 당 편집 : 이름을 일치시킨 다음 다른 방법으로 삭제하지 마십시오 (삭제, 일치). 그렇지 않으면 일치 여부에 관계없이 모든 파일이 삭제됩니다 . 즉, 이렇게 하지 마십시오 : find / -delete -name .DS_Store
.
일치하는 각 파일에 대해 외부 프로세스를 생성하는 오버 헤드를 피하는 일반적인 방법은 다음과 같습니다.
find / -name .DS_Store -print0 | xargs -0 rm
(그러나 여기에도 이식성 문제가 있습니다. 모든 버전의 find가 아닙니다 -print0
!)
find
하는 -exec rm {} +
데 사용할 수 있습니다 rm
.
.DS_Store
특수 문자를 전혀 포함하지 않으므로 따옴표는 불필요 하며이 경우에는 아무것도 변경하지 않습니다.
;
나 |
또는 >
나 <
하고``와 인용하지 않는 쉘에 특별한 의미를 갖는 많은 다른 사람.
xargs
는 제한된 크기의 인수 목록 문제를 명령을 여러 번 호출하여 투명하게 처리합니다.
맥북과 같은 컴퓨터의 경우 두 명령의 성능에 큰 차이가 없습니다. 그러나 -exec 버전을 보면 미묘한 차이가 있습니다.
sudo find / -iname ".file-to-delete" -exec rm {} \;
즉, ".file-to-delete"라는 이름의 모든 파일을 찾을 수 있습니다. 그러나이 검색은 원하지 않는 오 탐지를 반환 할 수 있습니다. 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 옵션이있는 것은 아닙니다. 따라서 적절한 작업을 위해 각 도구를 사용하는 것이 좋습니다. 이것이 유닉스 철학입니다. 하나의 도구, 하나의 작업, 필요한 것을하기 위해 함께 사용하십시오.
-ok rm {} \;
대신 참조하십시오 -exec rm {} \;
.
-delete
를-name
삭제 하기 전에 스위치 를 사용하면 읽었 으므로주의해야한다고 생각합니다.