You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BASH中如何解析nemo传递的file://、sftp://、davs://格式路径?

如何解析Nemo传递的file:///、sftp://、davs://路径为本地可访问路径?

问题描述

我正在开发一款适配Nemo的批量重命名工具,发现Nemo传递的文件路径都是URI格式,比如:

  • file:///home/jkoop/my-file.txt
  • sftp://my-nas/my-file.txt
  • davs://my-nas/my-file.txt

需要把这些路径转换成本地能直接读写的格式:

  • /home/jkoop/my-file.txt
  • /run/user/1000/gvfs/sftp=joek@my-nas/my-file.txt
  • /run/user/1000/davs=jkoop@my-nas/my-file.txt

想请教怎么实现这种转换,另外不确定能不能用realpath工具解决这个问题。


解决方案

1. 处理file://类型路径

这个最简单,直接去掉file://前缀即可,因为这就是本地文件的标准URI表示。用简单的字符串替换就能搞定:

# 示例:转换file://路径
echo "file:///home/jkoop/my-file.txt" | sed 's/^file:\/\///'

执行后直接输出本地路径:/home/jkoop/my-file.txt

2. 处理sftp://和davs://类型路径

这类远程路径是通过GNOME的GVFS(虚拟文件系统)挂载到本地的,默认挂载点在/run/user/<你的UID>/gvfs/目录下(普通用户UID通常是1000)。

直接手动字符串替换容易出错(比如URI里可能包含用户名、端口等信息),最可靠的方式是用GVFS自带的工具来获取本地映射路径:

# 示例:获取sftp路径的本地挂载路径
gvfs-info -a local-path 'sftp://my-nas/my-file.txt' | grep 'local-path:' | awk '{print $2}'

# 示例:获取davs路径的本地挂载路径
gvfs-info -a local-path 'davs://my-nas/my-file.txt' | grep 'local-path:' | awk '{print $2}'

执行后会直接返回对应的本地可访问路径,比如/run/user/1000/gvfs/sftp=joek@my-nas/my-file.txt。如果需要批量处理,把这个逻辑封装成函数遍历输入URI即可。

3. 关于realpath工具的适用性

realpath只能处理本地文件系统的路径,无法识别sftp://、davs://这类GVFS URI,所以用realpath解决不了这个问题,必须用GVFS专属工具或解析逻辑处理。


内容的提问来源于stack exchange,提问作者jkoop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:06:29