2 votes

Recréer un alias avec le même nom et le même horodatage de manière programmatique

Développons un utilitaire pour traiter par lots les fichiers alias hérités.

Mis en œuvre en tant que :

  • Finder File Service,
  • Flux de travail Automator,
  • Applescript,
  • Shellscript,
  • ou tout ce qui peut faire l'affaire.

Cette opération doit être effectuée pour chaque fichier du lot :

  1. Le fichier est-il un alias ? (éviter les autres types de fichiers fournis par erreur par l'utilisateur)
  2. Obtenez son chemin de fichier, son nom de fichier, son horodatage, son étiquette, ses tags.
  3. Supprimez-la.
  4. Recréez-le à l'emplacement du fichier original avec le nom de fichier, l'horodatage, l'étiquette et les balises déterminés.

Suivi : J'ai déposé un rapport de bogue auprès d'Apple, voir ci-dessous. Peut-être qu'Apple trouvera une solution. Mais je pense qu'un ou plusieurs AppleScripteurs compétents ici peuvent trouver une solution en quelques minutes. Ce serait cool, si nous trouvions une solution ici, et que nous l'offrions à toute la communauté MacOS.


Rapport de bogue à Apple, déposé le 2017-01-10

Finder / HFS+ / filesystem - Rafraîchir les anciens fichiers alias pour réduire la taille des fichiers avec un traitement par lot

UN BUG DE LONGUE DURÉE A HEUREUSEMENT ÉTÉ CORRIGÉ :

Dans MacOS Sierra, la taille des fichiers d'alias a finalement été réduite de façon spectaculaire, passant de plusieurs mégaoctets dans les systèmes Mac OS X 10.7-10.11 à seulement 1 Ko environ dans MacOS Sierra 10.12 (simplement en n'incluant pas les ressources des icônes, qui étaient de toute façon redondantes, étant juste une copie d'une icône générique de type de fichier).

VEUILLEZ PROPOSER UN CORRECTIF POUR L'HÉRITAGE DE BOGUES ÉGALEMENT :

Selon le degré d'utilisation des alias sur un système, il est possible d'économiser plusieurs Go pour certains utilisateurs.

Je propose à Apple d'offrir un processus par lot pour réduire la taille des fichiers d'alias hérités. Avec une option pour préserver les horodatages originaux des alias, car ils peuvent avoir une valeur d'information critique dans certains cas d'utilisation.

Vous pourriez alors effectuer une simple recherche dans le Finder, sélectionner les fichiers de votre choix (tous ou seulement certains), puis les glisser-déposer sur l'application de traitement par lots, le service de fichiers ou la commande de menu du Finder.

LA SOLUTION ACTUELLE AVEC QUICKLOOK NE FONCTIONNE QUE PARTIELLEMENT.

  1. Finder > Nouvelle fenêtre (cmd-N) > Recherche (cmd-F)
  2. Les critères de recherche s'affichent, définissez-les comme suit :
    • Si "Kind" est "Other", tapez "Alias".
    • Vous obtenez une fenêtre de résultats de recherche Finder.
  3. Afficher sous forme de liste et trier par taille.
    • Ensuite, vous avez les principaux responsables de la taille des fichiers en haut.
  4. Si vous consultez rapidement un fichier en utilisant la touche ESPACE, il n'y a pas de recréation d'alias.
  5. Faites "Fichier > Afficher l'original" (cmd-R) sur le fichier sélectionné.
  6. Dans la nouvelle fenêtre ouverte, QuickLook les fichiers alias avec SPACE.

Ensuite, certains fichiers alias sont recréés. Mais pas tous !

Fonctionne, mais seulement parfois : PDF, JPEG, ZIP si le plugin BetterZip QuickLook est le gestionnaire.

Parmi ceux-ci, tous les alias ne sont pas rafraîchis.

Cela semble également dépendre de l'application globale ou individuelle associée au fichier (paramètre "Ouvrir avec" du Finder, identificateur de type uniforme (UTI), fourchette de ressources TYPE/CREATOR) et du plugin QuickLook qui gère le type de fichier.

Un fichier recréé a une taille considérablement réduite (environ 1 KB). Malheureusement, il perd son horodatage original, mais obtient l'horodatage actuel (équivalent à /usr/bin/touch). J'aimerais que l'horodatage de l'alias soit conservé.

3voto

Créer un service avec Automator - Testé sur MacOS Sierra

  1. Ouvrir /Applications/Automator.app
  2. Fichier > Nouveau (cmd-N)
    • Choisissez un type de document : "Service".
  3. Service reçoit sélectionné : "fichiers ou dossiers" dans "Finder".
  4. Dans le volet de gauche, naviguez vers : Actions > Bibliothèque > Utilitaires > Exécuter AppleScript.
    • Faites glisser l'élément "Exécuter AppleScript" du volet de la bibliothèque, à gauche, vers le volet du code source, à droite.
  5. Effacer entièrement le contenu pré-rempli. Collez le code source suivant :

Code source AppleScript

use framework "Foundation" -- Cocoa-AppleScript

on run {input, parameters}
    repeat with thisItem in input
        tell application "Finder"
            if kind of thisItem is "Alias" then -- alias file only
                set parentPath to container of thisItem -- get the folder of this alias
                set {label index:l, comment:c, modification date:m, creation date:cr, original item:origPath, name:n} to properties of (item thisItem)
                if origPath is not missing value then -- not a breaking alias
                    set tagsList to (my tagsFor:(POSIX path of thisItem)) -- get the tags of the alias file (call an AppleScriptObjC handler)
                    delete thisItem -- move this alias to the trash

                    -- ** create an alias file **
                    set newAliasFile to make new alias at parentPath to origPath with properties {comment:c, creation date:cr, original item:origPath, name:n}
                    -- ** set the label ** (0 = no label)
                    if l is not 0 then set label index of newAliasFile to l
                    -- ** set  the tags ** ({} = no tag) 
                    if tagsList is not {} then (my setTags:tagsList forPath:(POSIX path of (newAliasFile as string))) -- call an AppleScriptObjC handler
                    -- ** change the modification date **
                    set modification date of newAliasFile to m
                end if
            end if
        end tell
    end repeat
end run

on tagsFor:posixPath -- Cocoa-AppleScript handler 
    set fileURL to current application's |NSURL|'s fileURLWithPath:posixPath
    set {theResult, theTags} to fileURL's getResourceValue:(reference) forKey:(current application's NSURLTagNamesKey) |error|:(missing value)
    if theTags = missing value then return {} -- no tags
    return theTags as list
end tagsFor:

on setTags:tagList forPath:posixPath -- Cocoa-AppleScript handler
    set fileURL to current application's |NSURL|'s fileURLWithPath:posixPath
    fileURL's setResourceValue:tagList forKey:(current application's NSURLTagNamesKey) |error|:(missing value)
end setTags:forPath:
  1. Fichier > Enregistrer (cmd-S) : Donnez-lui un nom comme "Alias récréation".
  2. Ouvrez Préférences Système > Clavier > Raccourcis > Services > Fichiers et dossiers > Alias de récréation, ou tout autre nom que vous lui avez donné.
    • Attribuez-lui un raccourci. Comme cmd-L est utilisé pour créer un alias (L comme dans "link"), je lui ai attribué cmd-alt-ctrl-L.
  3. Sélectionnez un ou plusieurs fichiers d'alias anciens, et traitez-les.
    • Avec votre raccourci cmd-alt-ctrl-L.
    • ou par le biais du menu principal : Finder > Services > Fichiers et dossiers > Alias de récréation.

Note : Le processus de lot est très transparent et les erreurs peuvent être corrigées. Les alias supprimés sont déplacés dans votre corbeille. Si vous avez fait une erreur, choisissez le fichier alias supprimé en question et exécutez Finder > Put back (cmd-backspace). Ceci remettra le fichier dans son ancien dossier parent et ouvrira le dossier parent dans une nouvelle fenêtre. Vous avez alors côte à côte l'alias recréé et l'alias original avec le suffixe " copy " et vous pouvez faire des corrections si nécessaire.

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