Конвертировать путь к файлу в URI в bash

Ответы:

5

Одним из способов сделать это является использование urlencode(установите его в Ubuntu через sudo apt-get install gridsite-clients).

urlencode -m "$filepath"

преобразует путь в URI. Часть «file: //» URI будет пропущена, но вы можете легко добавить это через однострочник bash:

uri=$(urlencode -m "$1"); echo "file://$uri"

или напрямую

echo "file://$(urlencode -m "$1")"

или

echo -n file://; urlencode -m "$1"

Большое спасибо Michael Kjörling за рекомендации!

Glutanimate
источник
Не забывайте цитаты! Вы , вероятно , хотите encodeduri=$(urlencode -m "$uri") с $uriв двойных кавычках!
gniourf_gniourf
@gniourf_gniourf Спасибо, изменили код соответствующим образом.
Glutanimate
4

Вы также можете использовать URI :: file модуля Perl непосредственно из командной строки:

$ path="/home/MHC/directory with spaces and ümläuts"
$ echo $path | perl -MURI::file -e 'print URI::file->new(<STDIN>)."\n"'
file:///home/MHC/directory%20with%20spaces%20and%20%C3%BCml%C3%A4uts
$

источник
1
Может быть сокращен до echo $path | perl -MURI::file -E 'say URI::file->new(<>)'Perl 5.10 (с 2007 года) или новее
Daniel Böhmer
2

В CentOS не требуется никаких дополнительных зависимостей:

$ python -c "import urllib;print urllib.quote(raw_input())" <<< "$my_url"
Rockallite
источник
С pathlibмодулем это можно сделать черезpython -c 'import sys,pathlib; print(pathlib.Path(sys.argv[1]).resolve().as_uri())' "$my_url"
umi
pathlibдоступно только в Python 3, который не установлен по умолчанию в CentOS.
Rockallite