Convertir ruta de archivo a URI en bash

Respuestas:

5

Una forma de hacerlo es usando urlencode(instalarlo en Ubuntu a través de sudo apt-get install gridsite-clients).

urlencode -m "$filepath"

convertirá la ruta a un URI. La parte "file: //" del URI se omitirá, pero puede agregarla fácilmente a través de un bash one-liner:

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

o directamente

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

o

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

¡Muchas gracias a Michael Kjörling por las referencias!

Glutanimato
fuente
¡No olvides las citas! ¡Probablemente quieras encodeduri=$(urlencode -m "$uri") con $uricomillas dobles!
gniourf_gniourf
@gniourf_gniourf Gracias, modificó el código en consecuencia.
Glutanimate
4

También puede usar el módulo URI del módulo Perl :: directamente desde la línea de comandos:

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

fuente
1
Se puede acortar a echo $path | perl -MURI::file -E 'say URI::file->new(<>)'Perl 5.10 (del año 2007) o más reciente
Daniel Böhmer
2

En CentOS, no se necesitan dependencias adicionales:

$ python -c "import urllib;print urllib.quote(raw_input())" <<< "$my_url"
Rockallita
fuente
Con el pathlibmódulo se podría hacer a través depython -c 'import sys,pathlib; print(pathlib.Path(sys.argv[1]).resolve().as_uri())' "$my_url"
umi
pathlibsolo está disponible en Python 3, que no está instalado de manera predeterminada en CentOS.
Rockallite