在OSX中替换xargs -d


22

在Linux中,您可以使用xargs -d,以下hostname命令对具有顺序名称的四个不同服务器快速运行该命令:

echo -n 1,2,3,4 |xargs -d, -I{} ssh root@www{}.example.com hostname

看起来OSX xargs命令不支持delimiter参数。您可以使用格式不同的echo或通过其他命令行实用程序来获得相同的结果吗?

Answers:


11

怎么样:

echo {1..4} | xargs -n1 -I{} ssh root@www{}.example.com hostname

来自man xargs

-n number
Set the maximum number of arguments taken from standard input for each invocation of utility.

1
如果值可以包含空格,换行符或制表符,则可以使用printf 'a\0a' | xargs -0 -n1 echo
Lri 2012年

44

另外,您始终可以xargs通过Homebrew和GNU findutils软件包安装GNU 。

安装自制软件:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

按照说明进行操作。然后安装findutils:

brew install findutils

这将使您的GNU xargsgxargs,并且您可以使用GNU / Linux惯用的语法。在findutils软件包中找到的其他基本命令(例如gfindor glocate或)也是如此gupdatedb,它们在OS X上具有不同的BSD副本。


谢谢!我这样做了,然后将路径添加到了我的路径.zshrc(如安装输出中所述),因此我不必使用g前缀。
异步


1

您还可以tr在OSX中使用将逗号转换为新行,并使用xargs枚举每个项目,如下所示:

echo -n 1,2,3,4 | tr -s ',' '\n' | xargs -I{} ssh root@www{}.example.com hostname
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.