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、以下のように、誤って最初のパス名の末尾から2番目のパス名を削除しようとしないように、単一のパス名で呼び出すのが最も安全です。

$ basename some/file e
fil

これらのユーティリティを呼び出すと、一度に1つの改行で区切られた文字列でユーティリティを実行するように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 {}

おすすめ記事