이것xargs 매뉴얼설명하다:
-I 바꾸기-str
--replace[=replace-str]
-i[replace-str]
초기 인수의 바꾸기-str 항목을 표준 입력에서 읽은 이름으로 바꿉니다.
이 부분이 이해가 안 돼요:with names read from standard input.
예를 들면 다음과 같습니다.
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo | wc -l
위의 코드는 디렉터리 내의 총 파일/디렉터리 수를 계산합니다.
누군가 나에게 이것을 설명해 줄 수 있습니까?
답변1
"표준 입력에서 읽은 이름 사용"은 xargs
표준 입력에서 전달된 데이터를 가져와서 분할하고 이를 사용하여 인수에 지정된 명령을 실행하는 것을 의미합니다. 기본적으로 공백이나 줄 바꿈으로 분할되며 echo
한 번에 가능한 한 많은 인수로 실행됩니다.
-0
예제의 옵션은 xargs
입력을 공백이나 줄 바꿈 대신 null 바이트로 분할하도록 지시합니다. 공백이나 개행 문자가 포함된 파일 이름을 올바르게 처리하기 위해 find
s 와 함께 사용됩니다.-print0
이 -I
옵션은 새 명령줄이 작성되는 방식을 변경합니다. 한 번에 원하는 만큼 매개변수를 추가하는 대신 xargs
입력에서 이름을 한 번에 하나씩 가져와서 지정된 토큰( {}
여기)을 찾아 해당 이름으로 바꿉니다.
귀하의 예에서는 {}
주어진 명령 템플릿에 존재하지 않으므로 xargs
실제로 주어진 각 파일 이름에 대해 인수 없이 한 번씩 실행하도록 xargs
지시 됩니다 . 이 콘텐츠를 보려면 다음을 삭제하세요 .echo
find
wc
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo
일련의 빈 줄이 표시됩니다. 이것을 다음과 결합하십시오.
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo {}
그리고
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0 echo
그리고
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0
더 나은 이해를 얻기 위해.