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

[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
NicolasAlex.Michel.remove
JiPaul wrote:

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 ?



Salut

Par alias tu veux dire un raccourcis hfs ?

Applescript, je ne connais pas.

En bash, les alias ne sont pas utilisable.
Ils sont légers et ont des resources non vides

if [ -d "$dossier" ]
te dira que c'est pas un dossier.

ls -lh "$dossier/rsrc" doit retourner une taille positive

GetFileInfo retournera une info de ce type :
type: "fdrp"
creator: "MACS"

ou encore :
type: "alis"
creator: "MACS"

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




Pour les symlink, la commande test les connais :

if [ -L "$dossier" ]
te dira oui si c'est un symlink

La commande find peut les trouver :
find "path" -type l

Et enfin tu pourrais les rechercher via un ls -l
ça commencera par un l genre :
lrwxr-xr-x

Sinon il y a aussi des alias dns et des alias de commandes bash, entre
autres alias. Mais vu que tu parles de symlink, je suppose que tu parles
d'alias de fichiers :)



--
Nicolas Michel
Avatar
g4fleurot
JiPaul wrote:

Y a-t-il un moyen de reconnaitre un alias dans un script



Pour Apple script, c'est "alias file", dans le dictionnaire Finder
ouvert dans l'Éditeur AppleScript)

Cependant, je ne comprend pas pourquoi il faut mettre un "s" (alias
files) pour que ça fonctionne.

exemple :
tell application "Finder"
open alias files of folder "Users:XX:xx" of startup disk
end tell

--
Gérard FLEUROT plus un
Avatar
blanc
Nicolas Michel wrote:

Par alias tu veux dire un raccourcis hfs ?



Oui. Un alias au sens de Mac OS X

Applescript, je ne connais pas.

En bash, les alias ne sont pas utilisables



ça, je sais

Ils sont légers et ont des resources non vides

if [ -d "$dossier" ]
te dira que c'est pas un dossier.

ls -lh "$dossier/rsrc" doit retourner une taille positive



Hélas pas suffisamment caractéristique àmha.

GetFileInfo retournera une info de ce type :
type: "fdrp"
creator: "MACS"

ou encore :
type: "alis"
creator: "MACS"



Je comprends le deuxième, mais le premier ?

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



Dommage.

Pour les symlink, la commande test les connais :

if [ -L "$dossier" ]
te dira oui si c'est un symlink

La commande find peut les trouver :
find "path" -type l



OK.

Et enfin tu pourrais les rechercher via un ls -l
ça commencera par un l genre :
lrwxr-xr-x



Oui. Je n'avais pas pensé à -L dans test. Et je pense que j'aurais
utilisé cette dernière poss.


Sinon il y a aussi des alias dns et des alias de commandes bash, entre
autres alias. Mais vu que tu parles de symlink, je suppose que tu parles
d'alias de fichiers :)



Oui, oui.

Merci de ta réponse :-)
--
JiPaul.
/ /--/--// Jean-Paul Blanc
|/| L | quelquepart en (somewhere in)
/|| = ||| FRANCE
Avatar
blanc
Fleuger wrote:

Pour Apple script, c'est "alias file", dans le dictionnaire Finder
ouvert dans l'Éditeur AppleScript)



OK. Merci :-)


Cependant, je ne comprend pas pourquoi il faut mettre un "s" (alias
files) pour que ça fonctionne.



Bah... une faute d'orthographe, sans doute ...

Ou alors un 's' pour que ce soit utilisable au pluriel. Ce dernier ayant
le bénéfice du nombre l'emporte alors sur le singulier ;-)


exemple :
tell application "Finder"
open alias files of folder "Users:XX:xx" of startup disk
end tell



Bon. Alors il va falloir que je fasse la conversion depuis le chemin
Unix ;-(


--
JiPaul.
/ /--/--// Jean-Paul Blanc
|/| L | quelquepart en (somewhere in)
/|| = ||| FRANCE
Avatar
Patrick Stadelmann
In article <1jft1jw.1wbc37ujqtlz4N%,
(JiPaul) wrote:

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



Selon la manière dont l'alias est référencé, il sera peut-être déjà
résolu quand le script le traitera ! Si ce n'est pas le cas, une méthode
consiste à tester si la propriété "original item" existe pour l'élément.

Après exécution, la variable t contient les noms des alias du dossier
choisis. Cela inclus les "vrais" alias et les liens symboliques :

set d to choose folder
set t to ""
tell application "Finder"
set f to every item of d
repeat with i in f
try
get original item of i
set t to t & name of i & return
end try
end repeat
end tell
t

Patrick
--
Patrick Stadelmann
Avatar
blanc
Merci de ta réponse, Patrick.

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 !



Hum, pas clair...

Si ce n'est pas le cas, une méthode
consiste à tester si la propriété "original item" existe pour l'élément.

Après exécution, la variable t contient les noms des alias du dossier
choisis. Cela inclus les "vrais" alias et les liens symboliques :



Cela ne me satisfait pas tout à fait. Je voudrais pouvoir les
distinguer.

Mon but est de remplacer de vrais alias par des liens physiques (ou de
façon optionnelle symboliques).

En fait j'ai déjà réalisé un script shell qui parcours un dossier, et
pour chaque fichier, vérifie l'existence d'un fichier de même nom dans
un dossier d'originaux. Si c'est le cas, le fichier initial (censé être
un alias) est supprimé et remplacé par un lien physique vers l'original.
Mais pour des raisons de sécurité, je voudrais que le remplacement ne se
fasse que si le fichier est un vrai alias.

Si je mets de côté la distinction entre alias et symlinks, ta solution
me conviendrait.

En fait, après avoir testé, elle est complètement équivalente à la
solution de Gérard. C'est-à-dire que si j'écris le script suivant :

set d to choose folder
set t to ""
tell application "Finder"
set f to every alias file of d
repeat with i in f
set t to t & name of i & return
end repeat
end tell
t

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

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 !...

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


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

set d to choose folder
set t to ""
tell application "Finder"
set f to every alias file of d
repeat with i in f
set t to t & name of i & return
end repeat
end tell
t



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é ?

--
JiPaul.
/ /--/--// Jean-Paul Blanc
|/| L | quelquepart en (somewhere in)
/|| = ||| FRANCE
Avatar
NicolasAlex.Michel.remove
JiPaul wrote:

Nicolas Michel wrote:

> Ils sont légers et ont des resources non vides
>
> if [ -d "$dossier" ]
> te dira que c'est pas un dossier.
>
> ls -lh "$dossier/rsrc" doit retourner une taille positive

Hélas pas suffisamment caractéristique àmha.



Peut-être une piste pour un test concrêt :

Il me semble que le contennu des alias commencent systématiquement par :

b o o k m a r k

(résultat de hexdump -c < alias )

strings retourne systématiquement
book
mark
aux 2 premières lignes.

>
> GetFileInfo retournera une info de ce type :
> type: "fdrp"
> creator: "MACS"
>
> ou encore :
> type: "alis"
> creator: "MACS"

Je comprends le deuxième, mais le premier ?



fdrp corresponds aux alias de dossier
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 ...

Après, suivant le type de fs je ne sais pas comment se comporte les
resources et les alias
--
Nicolas Michel
Avatar
Patrick Stadelmann
In article <1jfulau.kk7b2hyfz8ogN%,
(JiPaul) 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.

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.

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 !...

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.

set d to choose folder
set t to ""
tell application "Finder"
set f to every item of d
repeat with i in f
try
get original item of i
set t to t & name of i
if (alias of (info for i as alias) is true) then
set t to t & " : alias"
else
set t to t & " : symlink"
end if
set t to t & return
end try
end repeat
end tell
t

Patrick
--
Patrick Stadelmann
Avatar
Patrick Stadelmann
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. Il faut donc écrire :

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

Patrick
--
Patrick Stadelmann
1 2 3