BASH中如何解析nemo传递的file://、sftp://、davs://格式路径?
如何解析Nemo传递的file:///、sftp://、davs://路径为本地可访问路径?
问题描述
我正在开发一款适配Nemo的批量重命名工具,发现Nemo传递的文件路径都是URI格式,比如:
file:///home/jkoop/my-file.txtsftp://my-nas/my-file.txtdavs://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
相关产品推荐
相关产品推荐

