Comment puis-je convertir un chemin de fichier en URI dans la ligne de commande?
Exemple :
/home/MHC/directory with spaces and ümläuts
à
file:///home/MHC/directory%20with%20spaces%20and%20%C3%BCml%C3%A4uts
Comment puis-je convertir un chemin de fichier en URI dans la ligne de commande?
Exemple :
/home/MHC/directory with spaces and ümläuts
à
file:///home/MHC/directory%20with%20spaces%20and%20%C3%BCml%C3%A4uts
Réponses:
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!
encodeduri=$(urlencode -m "$uri")
avec $uri
des guillemets doubles!
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
$
echo $path | perl -MURI::file -E 'say URI::file->new(<>)'
avec Perl 5.10 (à partir de 2007) ou plus récent
Sur CentOS, aucune dépendance supplémentaire n'est requise:
$ python -c "import urllib;print urllib.quote(raw_input())" <<< "$my_url"
pathlib
module, cela pourrait se faire viapython -c 'import sys,pathlib; print(pathlib.Path(sys.argv[1]).resolve().as_uri())' "$my_url"
pathlib
est uniquement disponible dans Python 3, qui n'est pas installé par défaut sur CentOS.