Osx

dirname 似乎不適用於 xargs

  • March 2, 2019

xargsbasename按照我的期望一起工作:

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

xargsdirname,但是,似乎不能一起工作:

$ 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) 上。

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 {}.

引用自:https://unix.stackexchange.com/questions/503944