OVH Cloud OVH Cloud

[Q] reconnaitre un alias dans un script

21 réponses
Avatar
blanc
Bonjour à tous,

Y a-t-il un moyen de reconnaitre un alias dans un script, que ce soit un
Applescript ou un shell-script.

Qu'en est-il pour un lien symbolique (symlink) ? Je pense que je saurai
faire en shell script, mais en Applescript ?


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

10 réponses

1 2 3
Avatar
Patrick Stadelmann
In article <1jfuo5p.14onzl4u4tx4wN%,
(Nicolas Michel) wrote:

Si tu as une série d'alias tu peux tester un truc de ce genre :

find path -type f -exec GetFileInfo {} ; |grep -B2 ""MACS""



Si tu as GetFileInfo, le plus simple est de tester l'attribut "alias" :-)

GetFileInfo -aa un_vrai_fichier --> 0
GetFileInfo -aa un_alias --> 1
GetFileInfo -aa un_symlink --> 0


Patrick
--
Patrick Stadelmann
Avatar
Patrick Stadelmann
In article
,
Patrick Stadelmann wrote:

In article <1jfuocn.aspsvu1m27e21N%,
(JiPaul) wrote:

> Par contre ce qui ne marche pas avec l'un ou l'autre script, c'est de
> remplacer la première ligne par :
>
> set d to folder "Volumes:Vega2:IMAGES:Erwann"
>
> Qu'ai-je encore raté ?

La class "folder" ne fait pas partie intégrante d'AppleScript, elle est
définie par le Finder.



Ou alors utiliser :

set d to alias "..."

car "alias" est une classe de base !

Patrick
--
Patrick Stadelmann
Avatar
NicolasAlex.Michel.remove
Patrick Stadelmann wrote:

In article <1jfuo5p.14onzl4u4tx4wN%,
(Nicolas Michel) wrote:

> Si tu as une série d'alias tu peux tester un truc de ce genre :
>
> find path -type f -exec GetFileInfo {} ; |grep -B2 ""MACS""

Si tu as GetFileInfo, le plus simple est de tester l'attribut "alias" :-)



ah bin voilà ...

lol, merci Patrick :)

--
Nicolas Michel
Avatar
blanc
Patrick Stadelmann wrote:

Si tu as GetFileInfo, le plus simple est de tester l'attribut "alias" :-)

GetFileInfo -aa un_vrai_fichier --> 0
GetFileInfo -aa un_alias --> 1
GetFileInfo -aa un_symlink --> 0



OK. Je vais voir ça. Si je peux tester sans passer par osascript, c'est
aussi bien.
--
JiPaul.
/ /--/--// Jean-Paul Blanc
|/| L | quelquepart en (somewhere in)
/|| = ||| FRANCE
Avatar
blanc
Nicolas Michel wrote:

fdrp corresponds aux alias de dossier



Oups ! Comment n'y ai-je pas pensé !...

alis corresponds aux alias de fichiers
Et il y a en plus hdsk qui corresponds aux raccourcis réseau,
il me semble.

> >
> > ou même rien du tout, suivant les cas.
> > Cette liste n'est peut-être pas exhaustive.
>
> Dommage.

Sur le coup j'ai un doute, il me semble que j'ai fait un mauvais test et
que le truc qui n'avais pas de type/creator n'était pas un alias en
fait.

Si tu as une série d'alias tu peux tester un truc de ce genre :

find path -type f -exec GetFileInfo {} ; |grep -B2 ""MACS""

Puis tu compares avec un script genre

#!/bin/bash
IFS='
'
for i in `find . -type f`
do
echo $i
hexdump -c "$i" |head -n1
done |grep -B1 -e "b o o k "

check les différences entre les 2 et regarde si ça corresponds à tes
alias pour de vrais ...



OK. Merci je vais testé ça. En combinant avec la solution de Patrick.

--
JiPaul.
/ /--/--// Jean-Paul Blanc
|/| L | quelquepart en (somewhere in)
/|| = ||| FRANCE
Avatar
blanc
Patrick Stadelmann wrote:

La class "folder" ne fait pas partie intégrante d'AppleScript, elle est
définie par le Finder. Il faut donc écrire :

tell application "Finder" to set d to folder "...."



Mais c'est bien sûr !... ;-)

Merci encore :-)

--
JiPaul.
/ /--/--// Jean-Paul Blanc
|/| L | quelquepart en (somewhere in)
/|| = ||| FRANCE
Avatar
blanc
Patrick Stadelmann wrote:

> Selon la manière dont l'alias est référencé, il sera peut-être déjà
> résolu quand le script le traitera !

Un fichier "alias" contient en fait un Alias Record, qui permet
d'identifier le fichier même si on le déplace ou si on le renomme. Les
Alias Record sont également utilisé par AppleScript pour identifier tout
type de fichier ou dossier, par l'intermédiaire de la class "alias".
C'est traditionnellement sous cette forme que les fichiers et dossiers
sont connus dans AppleScript. Par exemple, la commande :

path to applications folder

renvoie un "alias" :

alias "Macintosh HD:Applications:"

bien que le dossier "Applications" soit un vrai dossier. Certaines
manipulations pour e.g. identifier un fichier peuvent conduire l'alias a
être résolu de manière transparente.

Autre cas typique, le drag and drop d'alias sur l'icône d'un applet
AppleScript : le Finder effectue la résolution avant d'invoquer le
script, celui-ci ne verra donc pas les alias.



D'accord. Donc finalement il vaut peut-être mieux que je fasse tout en
shell-script (en utilisant GetFIleInfo) pour être sûr que l'alias n'est
pas résolu. D'un autre côté connaître l'original (ce que permet AS) peut
être intéressant.


> j'obtiens exactement la même liste d'alias et symlinks qu'avec ta
> solution, sans avoir besoin de tester "original item".

La solution de Gérard ne permet pas de "reconnaître" un alias comme tu
le demandais, mais seulement d'obtenir la liste des alias dans un
dossier donné. C'est équivalent si tu dois traiter un dossier, mais pas
s'il s'agit d'une liste de fichiers arbitraires, dans différents
dossiers (e.g. résultat d'une recherche) qu'il faut filtrer.



Pour l'instant, oui, je donne le chemin du dossier en argument du
shell-script, et en outre j'y détermine aussi la liste des fichiers du
dossier, mais ce peut être fait dans l'AS. Donc c'est équivalent en
effet.
Mais ultérieurement j'envisage aussi de parcourir les sous-dossiers.
Alors à voir ...

> Bon. Si personne ne me donne la solution pour distinguer les deux types,
> finalement je ferai avec. Merci à vous trois.

Si, si c'est faisable. Il faut tester le champ "alias" de la structure
retournée par la commande "info for". Ce champ n'est vrai que pour les
vrais alias.



OK. Je vais regarder tout ça. Merci encore
--
JiPaul.
/ /--/--// Jean-Paul Blanc
|/| L | quelquepart en (somewhere in)
/|| = ||| FRANCE
Avatar
g4fleurot
JiPaul wrote:

Au fait Gérard, je n'ai pas eu besoin de mettre de 's' à "file". En fait
si je mets un 's', le compilateur le supprime !...



Sans "s", j'obtiens :
error "Erreur dans Finder : Il est impossible d'obtenir alias file of
folder
Probablement parce qu'il attend plusieurs aliases dans le dossier.

Je vois que tu es en MacOs X 10.5.8
Je suis en MacOs X 10.6.2
Il y a dû y avoir des modifications entre les 2 versions. Il y a une
semaine, on évoquait un point rouge surperflu dans les fenêtre de
dialogue ouverte par AS avec cette dernière version.

Comme j'apprécie beaucoup le test de la validité de l'alias proposé par
Patrick, je l'ai entegistré comme script et en lui rajoutant
tell application "Finder"
display dialog t buttons {"OK"} default button 1
end tell
pour vérifier la validité des aliases d'un dossier, mais dans la
fenêtre, j'ai toujours ce foutu point rouge de fermeture de fenêtre.

--
Gérard FLEUROT plus un
Avatar
Patrick Stadelmann
In article <1jfupnv.2ie3yt7ahw0yN%,
(Fleuger) wrote:

JiPaul wrote:

> Au fait Gérard, je n'ai pas eu besoin de mettre de 's' à "file". En fait
> si je mets un 's', le compilateur le supprime !...

Sans "s", j'obtiens :
error "Erreur dans Finder : Il est impossible d'obtenir alias file of
folder
Probablement parce qu'il attend plusieurs aliases dans le dossier.

Je vois que tu es en MacOs X 10.5.8
Je suis en MacOs X 10.6.2



Je suis en 10.5.8 et j'ai le même comportement que toi. Avec "alias
file" j'ai l'erreur que tu cites, et ça fonctionne avec "alias files".
Le 's' n'est pas supprimé à la compilation.

On peut aussi utiliser la formulation "every alias file" pour expliciter
le fait qu'on les veux tous. En principe, le compilateur corrige quand
il y a manifestement une erreur :

every alias files --> every alias file
first alias files --> first alias file
alias file 1 thru 2 --> alias files 1 thru 2

Patrick
--
Patrick Stadelmann
Avatar
blanc
Patrick Stadelmann wrote:

On peut aussi utiliser la formulation "every alias file" pour expliciter
le fait qu'on les veux tous.



Ben voilà :-) C'est cette formule que j'ai en fait utilisée !...

Donc quand on les veut tous, il faut pas d's et quand on en veut qu'un
(le premier) il faut un 's'... C'est logique ;-)
--
JiPaul.
/ /--/--// Jean-Paul Blanc
|/| L | quelquepart en (somewhere in)
/|| = ||| FRANCE
1 2 3