将参数通过管道传输到“open”命令中

将参数通过管道传输到“open”命令中

我正在尝试使用以下命令打开大量 .xml 文件:

ls | grep navigation-drawer-config- | open

但是,这不起作用。根据我对管道的理解,这应该将 grep 在与该名称模式匹配的目录中找到的内容管道化到 open 中,然后 open 应该会打开文件。我可以通过手动执行如下操作来打开它们:

open file1 file2

但是,当我使用第一个命令时,我返回了 open 命令的帮助屏幕。您无法将 grep 与 open 结合使用吗?还是我遗漏了其他内容?

答案1

问题在于您没有将文件名添加到 open 命令中,而是将 grep 的输出输入到 open 命令中。

有几种方法可以做到这一点,包括

open navigation-drawer-config-*

这将使用GLOB 扩展这可能是最快和最简单的方法。

或者

open `ls | grep "navigation-drawer-config-"`

它执行 ls 和 grep,然后将输出作为 open 命令的参数。

或者

find . -name "navigation-drawer-config-*" -exec open {} +

它将在当前目录和所有子目录中查找以 navigation-drawer-config- 开头的文件并“打开”它们。

答案2

如果你使用的是 UNIX 或大多数类 Unix 操作系统(Linux、BSD、mac os),则可以使用xargs它为不使用管道的行创建管道参数|;因此对于你的例子

ls | grep navigation-drawer-config- | xargs open

以供参考,的第一个参数xargs是(在示例中)open,它将从其标准输入提供的结果grep作为命令行参数,并执行“exec“open navigation-drawer-config”。

相关内容