dirname이 xargs에서 작동하지 않는 것 같습니다.

dirname이 xargs에서 작동하지 않는 것 같습니다.

xargsbasename예상대로 함께 작동합니다 .

$ printf '%s\n' foo/index.js bar/index.js baz/index.js | xargs basename
index.js
index.js
index.js

xargs그러나 dirname함께 작동하지 않는 것 같습니다.

$ printf '%s\n' foo/index.js bar/index.js baz/index.js | xargs dirname
usage: dirname path

나는 희망

foo
bar
baz

출력으로. 내가 무엇을 놓치고 있나요?

저는 Darwin 18.2.0(macOS 10.14.3)을 사용하고 있습니다.

답변1

dirnamemacOS에서는 단일 경로 이름만 사용되지만 basename여러 경로 이름을 사용할 수 있습니다. 그러나 basename아래와 같이 실수로 첫 번째 경로 이름 끝에서 두 번째 경로 이름을 제거하려고 시도하지 않도록 단일 경로 이름으로 호출하는 것이 가장 안전합니다.

$ basename some/file e
fil

이러한 유틸리티를 호출할 때 한 번에 하나의 줄바꿈으로 구분된 문자열씩 유틸리티를 실행하라는 xargs메시지가 표시될 수 있습니다 .xargs

printf '%s\n' some arguments | xargs -I {} basename {}

또는,

printf '%s\n' some arguments | xargs -I {} dirname {}

xargs -L 1 utility대신 사용할 수도 있습니다 xargs -I {} utility {}.

답변2

dirname인수는 1개만 필요합니다. GNU/coreutils 버전은 dirname여러 인수를 허용할 수 있지만 이는 비표준 확장입니다.

SYNOPSIS

    dirname string

관련 정보