-exec xargs 및 -print0의 사용법은 무엇입니까?


20

나는 이것이 하나의 명령 결과를 다음 명령에 입력으로 전달하는 일반적인 방법이라고 생각합니다.

이 세 가지는 어떻게 작동합니까? 아니면 어떤 웹 사이트 / URL은 무엇입니까?

답변:


25

입력해야 할 첫 번째 사항 :

man find

man xargs

find명령은 기본적으로 결과를 표준 출력으로 인쇄하므로 -print옵션은 일반적으로 필요하지 않지만 -print0공백이나 줄 바꿈이 포함 된 이름을 올바르게 해석 할 수 있도록 파일 이름을 0 (NULL) 바이트로 구분합니다.

-exec옵션 대신 xargs를의 사용할 수있는 무언가이다 - find 명령은 발견 한 각 항목에 대한 명령을 실행합니다.

xargs명령은 공백 또는 줄 바꿈으로 구분 된 문자열 (일반적으로 find 명령 에서 읽지 만 어디서나 올 수 있음)을 읽고 각 문자열에 대해 일부 명령을 실행합니다.
xargs가 -0 옵션으로 실행되면 NULL로 구분 된 문자열이 다음과 같이 출력됩니다.find ... -print0

xargs의 장점은 문자열을 함께 그룹화 할 수있어 n 번이 아닌 한두 번만 명령을 실행한다는 것 입니다.

따라서 일반적인 사용법에서 :

find start_directory -name '*.txt' | xargs ls -l 

find 는 파일 이름을 나열하고 xargs 는 다음과 같은 명령을 실행합니다.

ls -l file1.txt file2.txt file3.txt ... fileN.txt

find 명령을 실행하는 것보다 빠릅니다.

ls -l file1.txt
ls -l file2.txt
ls -l file3.txt
ls -l ...
ls -l fileN.txt

7

xargs는 현재이 POSIX 구문을 지원하는 현재 찾기 구현에는 더 이상 필요하지 않습니다.

find directory -name '*.txt' -exec ls -l {} + 

이것은 xargs 변형보다 더 간단하고 약간 빠릅니다.

find directory -name '*.txt' | xargs ls -l 

xargs는 'find -exec'보다 훨씬 적은 리소스를 사용합니다
Felipe Alvarez

7
그것은 다른 길입니다. xargs로 파이프하면 -exec보다 약간 더 많은 리소스가 사용됩니다. 아마도 "+"터미네이터를 간과 할 수도 있습니다.
jlliagre

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.