Converter caminho do arquivo em URI no bash

Respostas:

5

Uma maneira de fazer isso é usando urlencode(instale-o no Ubuntu via sudo apt-get install gridsite-clients).

urlencode -m "$filepath"

irá converter o caminho para um URI. A parte "file: //" do URI será deixada de fora, mas você pode adicioná-lo facilmente através de uma única linha de base:

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

ou diretamente

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

ou

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

Muito obrigado a Michael Kjörling pelas referências!

Glutanimado
fonte
Não esqueça as citações! Você provavelmente quer encodeduri=$(urlencode -m "$uri") entre $uriaspas duplas!
gniourf_gniourf
@gniourf_gniourf Obrigado, modificou o código de acordo.
Glutanimate
4

Você também pode usar o módulo Perl URI :: file diretamente da linha de comando:

$ 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
$

fonte
1
Pode ser encurtado para echo $path | perl -MURI::file -E 'say URI::file->new(<>)'com Perl 5.10 (do ano 2007) ou mais recente
Daniel Böhmer
2

No CentOS, nenhuma dependência extra é necessária:

$ python -c "import urllib;print urllib.quote(raw_input())" <<< "$my_url"
Rockallite
fonte
Com o pathlibmódulo, isso poderia ser feito viapython -c 'import sys,pathlib; print(pathlib.Path(sys.argv[1]).resolve().as_uri())' "$my_url"
umi
pathlibestá disponível apenas no Python 3, que não é instalado por padrão no CentOS.
Rockallite 20/06/19