Convertir le chemin du fichier en URI en bash


Réponses:


5

Une façon de le faire est d'utiliser urlencode(l'installer sur Ubuntu via sudo apt-get install gridsite-clients).

urlencode -m "$filepath"

convertira le chemin en URI. La partie "file: //" de l'URI sera laissée de côté, mais vous pouvez facilement l'ajouter via un bash one-liner:

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

ou directement

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

ou

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

Un grand merci à Michael Kjörling pour les références!


N'oubliez pas les citations! Vous voulez probablement encodeduri=$(urlencode -m "$uri") avec $urides guillemets doubles!
gniourf_gniourf

@gniourf_gniourf Merci d'avoir modifié le code en conséquence.
Glutanimate

4

Vous pouvez également utiliser le fichier URI :: du module Perl directement depuis la ligne de commande:

$ 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
Peut être raccourci echo $path | perl -MURI::file -E 'say URI::file->new(<>)'avec Perl 5.10 (à partir de 2007) ou plus récent
Daniel Böhmer

2

Sur CentOS, aucune dépendance supplémentaire n'est requise:

$ python -c "import urllib;print urllib.quote(raw_input())" <<< "$my_url"

Avec le pathlibmodule, cela pourrait se faire viapython -c 'import sys,pathlib; print(pathlib.Path(sys.argv[1]).resolve().as_uri())' "$my_url"
umi

pathlibest uniquement disponible dans Python 3, qui n'est pas installé par défaut sur CentOS.
Rockallite
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.