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)を使用しています。
macOSのdirname
は単一のパス名のみを使用しますが、basename
は複数のパス名を使用できます。ただし、次のように最初のパスの最後から2番目のパス名を誤って削除しないように、単一のパス名で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 {}
を使用することもできます。
dirname
引数は1つだけです。 GNU/coreutilsバージョンのdirname
は複数の引数を取ることができますが、これは非標準の拡張です。
SYNOPSIS
dirname string