【问题标题】:How to convert $NAUTILUS_SCRIPT_CURRENT_URI into PATH如何将 $NAUTILUS_SCRIPT_CURRENT_URI 转换为 PATH
【发布时间】:2010-12-25 11:28:50
【问题描述】:

我需要将带有非拉丁符号的 $NAUTILUS_SCRIPT_CURRENT_URI 转换为 PATH

例如
/home/shara/%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B9<br>%20%D1%81%D1%82%D0%BE%D0%BB/testdir
/home/shara/Рабочий стол/testdir

如何做到这一点?

【问题讨论】:

  • 对于未来的读者:我在 askubuntu 发现 this answer 工作得很好。

标签: bash path uri


【解决方案1】:

假设中间的<br>只是一个意外,是这样的:

in="/home/shara/%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B9%20%D1%81%D1%82%D0%BE%D0%BB/testdir"
eval out=\$\'${in//%/\\x}\'

注意,这不会对您的语言环境进行更正,它只会将 %XX 转义符替换为匹配的原始字节。如有必要,您可以使用iconv。此外,如果原始 % 被转义为 %% 而不是 %25(您的问题中没有提到)或者如果输入可能包含反斜杠,您也需要考虑这些。

【讨论】:

  • 避免eval: out=$(printf "${in//%/\\x}") 更安全,而且您不必进行所有转义。
【解决方案2】:

我是这样做的

selected_files=($NAUTILUS_SCRIPT_SELECTED_FILE_PATHS)
for dir in "${selected_files[@]}" ; do
    base=$(readlink -f "$(dirname "$dir")")
done

【讨论】:

    【解决方案3】:

    以下内容改编自 unix stackexchange(在这种情况下,我们不需要将 '+' 替换为 ' '),适用于任何 POSIX shell,而不仅仅是 bash,(例如破折号):

    current_nautilus_path=$(echo "$NAUTILUS_SCRIPT_CURRENT_URI" | sed -e 's/%/\\x/g' -e 's_^file://__' | xargs -0 printf "%b")
    

    或者,如果 bashisms 没问题,但您不想调用任何外部程序,则对 Jester's/Dennis Williamson's solution 稍作修改将为您提供不带“file:”前缀的路径:

    percent_decoded_uri=$(printf "${NAUTILUS_SCRIPT_CURRENT_URI//%/\\x}")
    current_nautilus_path=${percent_decoded_uri#file://}
    

    最后,如果从脚本中调用 python 不会打扰您,我强烈推荐 Glutanimate 建议的 solution from askubuntu,因为它免费提供对任意 gvfs 协议(例如 sftp)的支持:

    current_nautilus_path=$(python -c 'import gio,sys; print(gio.File(sys.argv[1]).get_path())' "$NAUTILUS_SCRIPT_CURRENT_URI")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-29
      • 2020-04-06
      • 2017-01-17
      • 1970-01-01
      • 2017-12-10
      • 2019-01-31
      • 1970-01-01
      相关资源
      最近更新 更多