首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用终端搜索文件,点击时用首选程序打开?

使用终端搜索文件,点击时用首选程序打开?
EN

Unix & Linux用户
提问于 2019-01-31 10:37:08
回答 1查看 96关注 0票数 1

我想以某种方式从搜索文件时找到的搜索结果中创建到终端中文件的链接。同样,您可以单击终端中的超链接,但在这种情况下,它将是一个文件,而不是URL。这个是可能的吗?

下面是我正在工作的命令。

代码语言:javascript
运行
复制
grep -rnw "$2" -e "$1"

..。这是我在日志中搜索"filezilla“时的截图。

我想要能够点击紫色文本,这是确切的文件位置,就像我打开一个超链接在终端内。

我在下面尝试了这个命令,但是所有这些操作都是自动打开与首选程序一起找到的每个搜索结果,在这个例子中,程序是mousepad。

代码语言:javascript
运行
复制
grep -rnw "$2" -e "$1" | xargs mousepad
EN

回答 1

Unix & Linux用户

发布于 2019-01-31 12:11:33

最近的终端仿真器确实在一定程度上处理超链接。如果它“知道”使用哪个程序来打开文档,那么您只需要在终端窗口中将文件名回显给stdout,前面就有正确的协议。因为我们处理的是本地文件,所以这意味着更改

代码语言:javascript
运行
复制
/path/to/file/this.doc

代码语言:javascript
运行
复制
file:///path/to/file/this.doc

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

代码语言:javascript
运行
复制
for i in $(ls); do echo "file://$(pwd)/$i"; done

ctrl+click

编辑

让@tripleee从评论中获得卓越的进步并融入到答案中.

代码语言:javascript
运行
复制
printf "file://$(pwd)/%s\n" *

<#>END编辑

这将不适用于文件名中有空格的文件,因为$(ls)的扩展会产生一个由空格分隔的文件名列表。文件名中的空格<#>将使shell认为它实际上是由空格分隔的两个文件名。

代码语言:javascript
运行
复制
my file.pdf

变成了

代码语言:javascript
运行
复制
my
file.pdf

如果你在你的文件名中有空格,那么试试这个,直到你找到一个更优雅的解决方案,因为我刚刚在等待下一个问题时黑了它.;-)

代码语言:javascript
运行
复制
for f in $(find . -type f -maxdepth 1 -iname "*" | sed 's/ /%20/g'); do echo "file://$(pwd)/${f#*/}"; done

只需按照正常方式使用find来返回所需的文件。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/497903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档