Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Shell] Convertion de chemins Applescript -> POSIX

16 réponses
Avatar
Olivier Croquette
Salut!

Ne trouvant rien d'autre, je me suis fait le script bash suivant pour
convertir des chemins à la "X:Y:Z" en "/Volumes/X/Y/Z"

#!/bin/bash

for f in "$@" ; do
osascript -e "POSIX path of \"$f\""
done


Le problème est que c'est terriblement lent. Y a-t'il des alternatives?

PS: quelque connait l'histoire et ne nom exact de ce format de chemin
X:Y:Z? Ca vient de MacOS Classic?

10 réponses

1 2
Avatar
laurent.pertois
Olivier Croquette wrote:

PS: quelque connait l'histoire et ne nom exact de ce format de chemin
X:Y:Z? Ca vient de MacOS Classic?


Yep, le ":" était alors le séparateur de chemin de fichiers. D'ailleurs,
c'était le caractère interdit dans les noms de fichiers,
automatiquement, en tous cas dans le Finder, remplacé par un "-". Si tu
essaies de nommer un fichier dans le Finder de Mac OS X avec un ":" il
te l'interdit mais ne renomme plus automatiquement.

Par contre, tu peux mettre des "/" qui seront alors vu, dans ton shell,
comme des ":". De même, en ligne de commande, tu peux écrire des ":" qui
seront vus, dans le Finder, comme des "/".

--
Politically Correct Unix - UTILITIES
The "touch" command has been removed from the standard distribution due
to its inappropriate use by high-level managers.

Avatar
Olivier Croquette
Laurent Pertois wrote, On 19/05/08 15:16:
Par contre, tu peux mettre des "/" qui seront alors vu, dans ton shell,
comme des ":". De même, en ligne de commande, tu peux écrire des ":" qui
seront vus, dans le Finder, comme des "/".


Très marrant, même si pas très utile et même peut-être dangeureux, merci
pour l'info!

Avatar
Nicolas-MICHEL'_remove_'
Olivier Croquette wrote:

Le problème est que c'est terriblement lent. Y a-t'il des alternatives?


On parle bien de shell script ?

sed non ?

là j'ai la flemme de te l'écrire mais ça doit pouvoir se faire :)

--
Nicolas - MICHEL at bluewin point ch
AIM : michelnicolas

Avatar
Olivier Croquette
Nicolas MICHEL wrote, On 19/05/08 16:12:
On parle bien de shell script ?


Oui.

sed non ?


Non :)
C'est pas aussi facile que de remplacer les : par des /, il faut aussi
mettre /Volumes devant le cas échéant, et comme je viens de l'apprendre,
remplacer les / par des : aussi (cf message de Laurent).
Je sais pas combien d'exceptions il y a encore... Je préfèrerai une
solution "système".

Avatar
laurent.pertois
Olivier Croquette wrote:

Laurent Pertois wrote, On 19/05/08 15:16:
Par contre, tu peux mettre des "/" qui seront alors vu, dans ton shell,
comme des ":". De même, en ligne de commande, tu peux écrire des ":" qui
seront vus, dans le Finder, comme des "/".


Très marrant, même si pas très utile et même peut-être dangeureux, merci
pour l'info!


Bah, Apple a cherché à faire simple pour l'utilisateur de base, celui
qui ne voit que le Finder et qui avait déjà des fichiers créés sur Mac
OS pré-X et potentiellement des "/" dans le nom (et j'en connais plein).

--
Politically Correct Unix - UTILITIES
The "touch" command has been removed from the standard distribution due
to its inappropriate use by high-level managers.


Avatar
Patrick Stadelmann
In article <g0rscf$685$00$,
Olivier Croquette wrote:

Salut!

Ne trouvant rien d'autre, je me suis fait le script bash suivant pour
convertir des chemins à la "X:Y:Z" en "/Volumes/X/Y/Z"


osascript -e 'POSIX path of "Backup:"'

--> /Volumes/Backup/

Patrick
--
Patrick Stadelmann

Avatar
Olivier Croquette
Patrick Stadelmann wrote, On 20/05/08 9:25:
osascript -e 'POSIX path of "Backup:"'

--> /Volumes/Backup/


Euh, merci, mais relis mon message original sans en sauter les 3/4 :)

Avatar
Patrick Stadelmann
In article <g0uf0s$6g0$00$,
Olivier Croquette wrote:

Patrick Stadelmann wrote, On 20/05/08 9:25:
osascript -e 'POSIX path of "Backup:"'

--> /Volumes/Backup/


Euh, merci, mais relis mon message original sans en sauter les 3/4 :)


C'est destiné à être lu par des humains ce qui suit #!/bin/bash ?

;-)

Patrick
--
Patrick Stadelmann


Avatar
blanc
Olivier Croquette wrote:

Non :)
C'est pas aussi facile que de remplacer les : par des /, il faut aussi
mettre /Volumes devant le cas échéant, et comme je viens de l'apprendre,
remplacer les / par des : aussi (cf message de Laurent).


Mais si, mais si (en une seule ligne) :

echo "$@"| sed -e 'y#:/#/:#' -e 's/^//Volumes//' -e 's/ /
/Volumes//g'

Attention ne confond pas / avec un V...

Je te laisse rajouter les autres exceptions... :-) (sauf si tu as besoin
d'aide... ;-)

--
JiPaul.
/ /--/--// Jean-Paul Blanc
|/| L | quelquepart en (somewhere in)
/|| = ||| FRANCE

Avatar
Olivier Croquette
JiPaul wrote, On 20/05/08 19:54:
C'est pas aussi facile que de remplacer les : par des /, il faut aussi
mettre /Volumes devant le cas échéant, et comme je viens de l'apprendre,
remplacer les / par des : aussi (cf message de Laurent).


Mais si, mais si (en une seule ligne) :

echo "$@"| sed -e 'y#:/#/:#' -e 's/^//Volumes//' -e 's/ /
/Volumes//g'

Attention ne confond pas / avec un V...

Je te laisse rajouter les autres exceptions... :-) (sauf si tu as besoin
d'aide... ;-)


Je le répète: la difficulté réside justement dans les exceptions. Un
script sed aussi complexe soit-il sera peut-être rapide, mais
certainement bourré d'erreurs dûes aux cas particuliers, qu'à l'opposé
Apple prend en compte dans "POSIX path of ...".
Certes je trouve la solution osascript trop lente, mais je ne suis pas
prêt à sacrifier la justesse des résultats pour la rapidité...


1 2