Voici ma tentative de résoudre ce problème avec Applescript. Le script suivant prendra des alias sélectionnés dans le Finder et tentera de les relier au nouveau chemin en remplaçant Backup
par External
dans le chemin POSIX.
Je l'espère, c'est simple. Vous pourriez probablement le rendre récursif pour rechercher des alias dans des dossiers sélectionnés, mais c'est plus de travail que je ne suis prêt à faire - et puis il y a le problème de traiter les alias de dossiers. Les choses pourraient devenir compliquées. ;-)
J'espère que cela aide.
tell application "Finder"
set these_items to the selection
end tell
repeat with i from 1 to the count of these_items
set this_item to (item i of these_items) as alias
set this_info to info for this_item
if class of this_item is alias then
tell application "Finder"
set original_file to original item of this_item
set this_alias_file_name to displayed name of this_item
set container_folder to container of this_item
set the_path to the POSIX path of (original_file as alias)
set new_path to my replaceText("/Backup/", "/External/", the_path)
move this_item to trash
try
make new alias file at container_folder to (POSIX file new_path) with properties {name:this_alias_file_name}
on error errMsg number errorNumber
if errorNumber is -10000 then -- nouveau fichier original non trouvé, essayer de relier à l'ancien
try
make new alias file at container_folder to (POSIX file the_path) with properties {name:this_alias_file_name}
on error errMsg number errorNumber
if errorNumber is -10000 then -- ancien original non trouvé. le lien est mort Jim
display dialog "Le fichier original de l'alias " & this_alias_file_name & " n'a pas été trouvé."
else
display dialog "Une erreur inconnue s'est produite: " & errorNumber as text
end if
end try
else
display dialog "Une erreur inconnue s'est produite: " & errorNumber as text
end if
end try
end tell
end if
end repeat
on replaceText(find, replace, subject)
set prevTIDs to text item delimiters of AppleScript
set text item delimiters of AppleScript to find
set subject to text items of subject
set text item delimiters of AppleScript to replace
set subject to "" & subject
set text item delimiters of AppleScript to prevTIDs
return subject
end replaceText
0 votes
Il manque quelque chose dans votre histoire. Sous OS X, les Alias ne se casseront pas lorsque le Volume est renommé.
2 votes
Ils le feront s'ils pointent vers un chemin dans /Volumes
1 votes
@calavara les alias ne sont pas des liens symboliques, ils sont liés à un ID de fichier et non à un chemin.
0 votes
@ghoppe: Ce que j'observe, c'est que les alias sont cassés. Je veux simplement les réparer dans leur ensemble et je ne sais pas comment faire. La principale partie manquante de mon histoire, j'ai peur, est à l'intérieur du Finder. Autant que je sache, les alias contiennent non seulement un identifiant de fichier, mais aussi un chemin et de nombreuses autres informations qu'un algorithme caché utilise pour la résolution de l'alias. Si j'utilise la commande
strings
sur mes alias en échec, j'observe qu'ils contiennent un chemin complet vers/Volumes/Backup/...
. Quoi qu'il en soit, je commence à penser que les liens symboliques avec un chemin relatif pourraient être une solution plus robuste dans mon cas.0 votes
@ghoppe: ils contiennent un chemin... consultez fr.wikipedia.org/wiki/Alias_(Mac_OS). En particulier la section "Prévenir les échecs d'alias", et la déclaration "Il est similaire au lien symbolique Unix, mais avec l'avantage supplémentaire de fonctionner même si le fichier cible est déplacé vers un autre emplacement sur le même disque", et "L'original peut être déplacé vers un autre endroit au sein du même système de fichiers, sans rompre le lien."
0 votes
@calavera oui, je sais qu'ils contiennent un chemin, mais ils font également référence à un ID de fichier. Et oui, je sais qu'ils se cassent s'ils sont déplacés vers un système de fichiers différent. Cela n'invalide pas mon point. Un alias ne se cassera pas si le volume contenant les fichiers est renommé. Ils étaient cassés lorsque le fichier cible a été déplacé.
0 votes
@ghoppe : Je soupçonne que la défaillance a été introduite pendant la procédure de sauvegarde. J'utilise SuperDuper.
1 votes
@mouviciel Oui, c'est exact. Désolé d'être pointilleux sur la façon dont ils ont été cassés. Je chipote juste. Je suppose que nous avons tous les deux raison à moitié. Ils ont été cassés parce que les fichiers ont été copiés de Externe -> Sauvegarde donc l'identifiant de fichier ne pouvait plus correspondre. Lorsque vous avez renommé le volume Sauvegarde en Externe, le chemin d'accès au fichier ne correspondait plus, donc la deuxième redondance dans l'alias ne pouvait plus trouver le fichier. Les deux méthodes utilisées par le système d'exploitation pour trouver le fichier ne pouvaient plus le trouver.