使用终端搜索文件并在单击时使用首选程序打开?

使用终端搜索文件并在单击时使用首选程序打开?

我想以某种方式从搜索文件时找到的搜索结果创建指向终端内文件的链接。与单击终端内的超链接相同,但在本例中它将是一个文件而不是 URL。这可能吗?

以下是我正在使用的命令。

grep -rnw "$2" -e "$1"

...这是在我的日志中搜索术语“filezilla”时的屏幕截图

在此输入图像描述

我希望能够单击紫色文本,它们是确切的文件位置,就像我在终端中打开超链接一样。

我在下面尝试了这个命令,但它所做的只是自动打开通过首选程序找到的每个搜索结果,在本例中该程序是鼠标垫。

grep -rnw "$2" -e "$1" | xargs mousepad

答案1

最近的终端仿真器确实在有限程度上处理超链接。如果它“知道”使用哪个程序来打开文档,那么您只需stdout在终端窗口中回显文件名,并在前面加上正确的协议即可。由于我们正在处理本地文件,因此这意味着更改

/path/to/file/this.doc

file:///path/to/file/this.doc

就像一个超链接,但没有域名。如果您的 shell 知道如何打开文件类型,那么它就会这样做。

for i in $(ls); do echo "file://$(pwd)/$i"; done

ctrl+click

编辑

为了从评论和答案中带来 @tripleee 的出色改进......

printf "file://$(pwd)/%s\n" *

结束编辑

这对于文件名中带有空格的文件不起作用,因为 的扩展$(ls)会生成由空格分隔的文件名列表。空间之内文件名将使 shell 认为它实际上是由空格分隔的两个文件名。

my file.pdf

变成

my
file.pdf

如果你的文件名中有空格,那么尝试这个,直到你找到一个更优雅的解决方案,因为我只是为了下一个问题而破解它......;-)

for f in $(find . -type f -maxdepth 1 -iname "*" | sed 's/ /%20/g'); do echo "file://$(pwd)/${f#*/}"; done

只需按照正常方式使用find即可返回您想要的文件。

相关内容