find -exec cmd {} + vs | xargs
어떤 파일이 매우 큰 파일 세트보다 효율적이며 사용해야합니까?
find . -exec cmd {} +
또는
find . | xargs cmd
(파일 이름에 재미있는 문자가 없다고 가정)
속도 차이는 중요하지 않습니다.
그러나 다음을 확인해야합니다.
스크립트는 파일 이름에 공백, 탭 등이없는 파일이 없다고 가정하지 않습니다. 첫 번째 버전은 안전하고 두 번째 버전은 안전하지 않습니다.
스크립트는 "
-
"으로 시작하는 파일을 옵션으로 취급하지 않습니다 .
따라서 코드는 다음과 같아야합니다.
find . -exec cmd -option1 -option2 -- {} +
또는
find . -print0 | xargs -0 cmd -option1 -option2 --
첫 번째 버전은 1을 무시할 수 있기 때문에 더 짧고 작성하기 쉽지만 두 번째 버전은 " -exec cmd {} +
"가 GNU findutils의 비교적 새로운 옵션이므로 (2005 년 이후 많은 실행중인 시스템에는 아직 없을 것입니다) 그리고 최근 에 버그 가있었습니다 . -exec cmd {} +
다른 답변에서 볼 수 있듯이 많은 사람들이이 " "를 알지 못합니다 .
find . | xargs cmd
보다 효율적입니다 ( cmd
와는 달리 각 일치에 대해 한 번 exec
실행되는 것과 달리 가능한 한 몇 번 실행 됩니다 cmd
). 그러나 파일 이름에 공백이나 펑키 문자가 포함되어 있으면 문제가 발생할 수 있습니다.
다음을 사용하는 것이 좋습니다.
find . -print0 | xargs -0 cmd
이 파일 이름은 펑키 문자가 포함 된 경우에도 작동합니다 ( -print0
차종은 find
, NUL 종료 일치를 인쇄 -0
차종이 xargs
이 형식을 기대합니다.)
Modern xargs
의 버전은 종종 병렬 파이프 라인 실행을 지원합니다.
그 사이에 선택에 관해서 분명히 피벗 점을 수 있습니다 find … -exec
및… | xargs
참고 URL : https://stackoverflow.com/questions/896808/find-exec-cmd-vs-xargs
'developer tip' 카테고리의 다른 글
Windows : XAMPP 대 WampServer 대 EasyPHP 대 대안 (0) | 2020.07.29 |
---|---|
루트 도메인 CNAME 제한을 극복하는 방법? (0) | 2020.07.29 |
SLF4J를 사용하도록 Hibernate 4에서 로깅을 구성하는 방법 (0) | 2020.07.29 |
원시 가치를 얻는 방법 (0) | 2020.07.29 |
IF 문 : 조건이 거짓 인 경우 셀을 비워 두는 방법 ( ""이 작동하지 않음) (0) | 2020.07.29 |