7 votes

Comment réparer les alias échoués?

J'avais deux disques durs externes : Externe et Sauvegarde. Externe avait de nombreux alias qui pointaient vers d'autres fichiers sur le même disque. La Sauvegarde était utilisée pour sauvegarder Externe.

Externe a échoué, et j'utilise désormais Sauvegarde, que j'ai depuis renommée en Externe. Malheureusement, tous ces alias pointent désormais vers /Volumes/Sauvegarde/… et ne fonctionnent donc plus.

Je ne veux pas avoir à les corriger ou à les recréer un par un.

Y a-t-il un moyen de corriger tous les alias pour qu'ils pointent vers /Volumes/Externe/… au lieu de /Volumes/Sauvegarde/… ?

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.

3voto

ghoppe Points 7682

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

Merci beaucoup pour ce script! Je ne suis pas un expert en Applescript donc je ne vais pas essayer de le mettre à jour. Je pense qu'une solution possible se situe entre Applescript et bash avec son puissant find. Merci encore!

0 votes

Impossible de dire que ceci est une réponse, mais j'essaie d'exécuter le script ci-dessus et je reçois une erreur indiquant qu'il ne peut pas obtenir l'élément original du fichier alias. Cependant, lorsque je fais manuellement un "Obtenir des informations" pour le fichier en question, je vois en effet une valeur "Origine" dans l'affichage. Extrait pertinent : si la classe de cet élément est un alias, alors dire à l'application "Finder" de définir le fichier d'origine comme étant l'élément original de cet élément. Avez-vous une idée pourquoi cela ne donne pas d'élément original alors que "Obtenir des informations" dans Finder le montre clairement ?

0 votes

Ghoppe thx de la part des Pays-Bas, votre script était pour moi le meilleur, ce qui a donné un excellent travail accompli! Salutations de Hollande au Canada ;-) Robin

2voto

Shawn Points 8120

Nommez-vous le disque en retour vers Backup? Sérieusement, je pense que ce serait le moyen le plus rapide de résoudre le problème. Ou vous pourriez écrire un script shell qui trouve de manière récursive tous les alias pointant vers le volume "Backup" et les recréer pour pointer vers le nouveau nom...

edit

Consultez http://sveinbjorn.org/osxutils_docs, en particulier mkalias.

0 votes

Mon nouveau backup est nommé "Backup"... L'idée du script shell est ce que j'ai en tête mais je ne connais aucun outil capable d'afficher et de modifier le contenu des alias.

0 votes

Mkalias semble intéressant! Mais la dernière version date de 2003 et la note technique mentionnée est pour Mac OS 9... Si je ne trouve rien d'autre, j'essaierai de le mettre à jour pour Snow Leopard...

1voto

New Alexandria Points 572

J'ai récemment dû résoudre le même problème, et j'ai écrit ce code ruby pour corriger tous les alias de manière récursive.

Je le collerai ici:

#!/usr/bin/ruby

# ce sont les dossiers contenant toutes vos images
if ARGV.size == 2
  dir_base     = ARGV[0]
  alias_folder = ARGV[1]
else
  puts "usage $0 dir_with_all_files sub_dir_containing_broken_aliases"
  puts "  or pass -d to use defaults:  ~/img  background"
  if ARGV[0] && ARGV[0] == '-d'
    dir_base     = File.expand_path '~/img'
    alias_folder = 'background'
  end
end

# liste de tous les chemins de fichiers alias, excluant les répertoires
alist = Dir.glob("#{dir_base}/#{alias_folder}/**/*").
            select{|w| w.scan('.').any? }

# une liste de tous les chemins de fichiers, excluant les contenus du dossier alias
flist = Dir.glob("#{dir_base}/**/*").
            reject{|w| w.scan("#{dir_base}/#{alias_folder}").any? }

# créer forcer des nouveaux alias en écrasant les anciens fichiers
alist.each do |f| 
  flist.each do |w| 
    `ln -fs #{w.gsub(' ','\ ')} #{f.gsub(' ','\ ')}` if w.split('/').last == f.split('/').last
    puts "linked #{w.gsub(' ','\ ')}  to  #{f.gsub(' ','\ ')}"
  end
end

0 votes

+1 Même si j'ai déjà résolu mon propre problème, je crois que votre contribution sera utile pour les autres. Merci.

0voto

pvieira Points 795

Son problème ne concerne pas le nom "Backup". Il m'arrive la même chose avec le menu contextuel "Comparer les fichiers" (je pense que c'est le problème) et certainement avec les fichiers ouverts à partir de DreamWeaver. Il y a eu un changement / une correction dans le système d'exploitation d'Apple car DW essaie d'ouvrir le même fichier dans Chrome sans "Volume" avant le nom de la partition, et le même fichier ouvert dans Chrome révèle "Volume" qui fonctionne.

Donc soit Adobe soit Apple a apporté un changement ou a corrigé la manière dont ils pointent/appellent une partition autre que le disque de démarrage dans ce même lecteur.

Donc dans le cas de l'OP, le nom du lecteur EST backup. Le problème est que les alias ont "Volume" ajouté. Je pense qu'à un moment donné, le disque de démarrage ne devait PAS inclure "Volumes" et plus tard ils l'ont corrigé pour le Finder et d'autres endroits évidents mais ils n'ont pas encore touché aux alias.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X