xargs
basename
예상대로 함께 작동합니다 .
$ 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
dirname
macOS에서는 단일 경로 이름만 사용되지만 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