我在 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)"
即使文件包含空格,这也能起作用。