Как преобразовать $ NAUTILUS_SCRIPT_CURRENT_URI в PATH - PullRequest
1 голос
/ 25 декабря 2010

Мне нужно преобразовать $ 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 голосов
/ 29 декабря 2010

Я сделал это с этим

selected_files=($NAUTILUS_SCRIPT_SELECTED_FILE_PATHS)
for dir in "${selected_files[@]}" ; do
    base=$(readlink -f "$(dirname "$dir")")
done
0 голосов
/ 17 ноября 2016

Следующее, адаптированное из unix stackexchange (в этом случае нам не нужно заменять '+' на ''), будет работать с любой оболочкой POSIX, а не только с bash (например, dash):

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

В качестве альтернативы, если bashisms в порядке, но вы не хотите вызывать какие-либо внешние программы, небольшое изменение решения Джестера / Денниса Уильямсона даст вам путь безпрефикс "file:":

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

Наконец, если вызов python из скрипта не беспокоит вас, я настоятельно рекомендую решение из askubuntu , предложенное Glutanimate, так как онообеспечивает поддержку произвольных протоколов gvfs (например, sftp) бесплатно:

current_nautilus_path=$(python -c 'import gio,sys; print(gio.File(sys.argv[1]).get_path())' "$NAUTILUS_SCRIPT_CURRENT_URI")
0 голосов
/ 25 декабря 2010

Предположим, что <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 (это не упоминается в вашем вопросе) или если входные данные могут содержать обратную косую черту, вам также придется учитывать их.

...