如何将$ NAUTILUS_SCRIPT_CURRENT_URI转换为PATH

时间:2010-12-25 11:28:51

标签: bash path uri

我需要将带有非拉丁符号的$ 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

怎么做?

3 个答案:

答案 0 :(得分:0)

假设中间的<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(在您的问题中没有提及),或者如果输入可能包含反斜杠,那么您也需要考虑这些。

答案 1 :(得分:0)

我用这个

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

答案 2 :(得分:0)

以下内容改编自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")