grep之后直接打开文件

grep之后直接打开文件

我在 Linux 中遇到了管道问题,

ls | grep feedback

我有一个 xdg-open 的别名,它是打开的,如何才能让 grep 中的文件名直接打开

这不起作用

ls | grep feedback | open

答案1

参数 从标准输入构建并执行命令行

语法很简单:

ls | grep feeback | xargs open

如果文件名包含空格,此方法将不起作用。例如,对于名为的文件foo bar

ls | grep foo | xargs open

上述操作将尝试打开一个名为的文件foo,然后打开一个名为的文件bar,因为空格通常将参数分隔开。

在这种情况下,您可以使用引号来分隔文件名:

ls | grep foo | xargs -I '{}' open '{}'

但是,如果文件名包含空格,这种方法可能会失败。


另一种选择是使用寻找,这样就完全避免了使用管道:

find -maxdepth 1 -name '*foo*' -exec open '{}' \;

这里,-maxdepth 1使 find 仅在当前目录中搜索(即不包括子目录),-name '*foo*'搜索包含字符串的文件在其名称和中-exec open {} \;{}用已找到的文件名替换。 find 将自动处理特殊字符。


通过命令替换,可以得到类似的结果:

open "$(ls | grep feedback)"

即使文件包含空格,这也能起作用。

相关内容