如何使脚本支持 file:/// 符号?

如何使脚本支持 file:/// 符号?

当我复制任何文件并将其粘贴到控制台或文本编辑器中时,它会被传递为

file:///home/user/path/file

当我将它传递给脚本时找不到它

将其转换为普通 Linux 路径或以某种方式使脚本支持它的最简单方法是什么?

例如

cat file:///home/user/path/file

没有这样的文件或目录

答案1

我不知道有任何命令可以在文件 URL 和文件路径之间进行转换,但你可以使用 python 或任何其他与 gio 绑定的语言进行转换。例如:

$ python -c 'import gio,sys; print(gio.File(sys.argv[1]).get_path())' file:///home/user/path/file%20with%20spaces
/home/user/path/file with spaces

答案2

您还可以使用urlencodesudo apt-get gridsite-clients):

$ echo "$(urlencode -d "file:///folder/with%20spaces")"
file:///folder/with spaces
$ echo "$(urlencode -d "file:///folder/with%20spaces"|cut -c 8-)"
/folder/with spaces

如果不需要十六进制支持,则只需使用cut -c 8-。或者,您可以将 urlencode 与任何其他删除方法file://(sed、括号扩展等)一起使用。

答案3

file://要从URL 中删除前缀,可以使用sed

echo "file:///home/user/path/file" | sed "s/^file:\/\///g"

上述代码的作用是:

  • 将 URL 显示到标准输出(因此可以使用 sed 进行修改)
  • file://将以 开头的任何行中的所有 替换为空file://。这实际上会file://从 URL 中删除,只留下/home/user/path/file

要通过脚本使用它,您可以尝试以下操作:

cat $(echo "file:///home/user/path/file" | sed "s/^file:\/\///g")

现在错误信息是:

cat: /home/user/path/file: No such file or directory

(请注意,它指的是正确的文件名而不是 URL。)

将转换后的文件名存储在 shell 变量中并在之后使用它会更加简洁。

MYFILE=$(echo "file:///home/user/path/file" | sed "s/^file:\/\///g")
cat $MYFILE

答案4

您可以使用它,假设file_path包含路径:

#!/bin/bash

file_path='file:///home/me/Desktop/path test'

file_path="${file_path#file://}"

echo "${file_path}"

它将打印/home/me/Desktop/path test。这样,它就可以使用或不使用file://,只需使用 Bash 字符串操作即可。


您可以将其添加到函数(in .bashrc)以方便使用:

功能:

norm_path() {
    echo "${@#file://}"
}

用法:

cat "$(norm_path file:///home/user/path/file)"

相关内容