Vuelva a crear un alias con el mismo nombre y marca de tiempo mediante programación

Desarrollemos una utilidad para procesar por lotes archivos de alias heredados.

Implementado como:

  • servicio de búsqueda de archivos,
  • flujo de trabajo del automatizador,
  • Manzana,
  • shellscript,
  • o cualquier otra cosa que esos el trabajo.

Para cada archivo en el lote, esto debe hacerse:

  1. ¿El archivo es un alias? (evite otros tipos de archivos proporcionados por error del usuario)
  2. Obtenga su ruta de archivo, nombre de archivo, marca de tiempo, etiqueta, etiquetas.
  3. Bórralo.
  4. Vuelva a crearlo en la ruta de archivo original con el nombre de archivo determinado, la marca de tiempo, la etiqueta y las etiquetas.

Seguimiento: presenté un informe de error a Apple, ver más abajo. Tal vez a Apple se le ocurra una solución. Pero creo que algunos expertos en AppleScripter pueden encontrar una solución en cuestión de minutos. Sería genial si encontramos una solución aquí y la ofrecemos a toda la comunidad de macOS.


Informe de error a Apple, presentado el 2017-01-10

Finder / HFS+ / filesystem: actualización de archivos de alias heredados para reducir el tamaño del archivo con proceso por lotes

UN ERROR DE LARGA DURACIÓN FUE CORREGIDO POR SUERTE:

En macOS Sierra, el tamaño de archivo de los alias finalmente se redujo drásticamente, de varios megabytes en los sistemas Mac OS X 10.7-10.11 a solo alrededor de 1 KB ahora en macOS Sierra 10.12. (Simplemente al no incluir los recursos de íconos, que en su mayoría eran redundantes al ser solo una copia de un ícono de tipo de archivo genérico).

POR FAVOR OFREZCA UNA SOLUCIÓN PARA EL LEGADO DE ERRORES TAMBIÉN:

Según la cantidad de alias que se utilicen en un sistema, existe la posibilidad de ahorrar varios GB para algunos usuarios.

Le propongo a Apple que ofrezca un proceso por lotes para reducir el tamaño de archivo de los archivos de alias heredados. Con una opción para conservar las marcas de tiempo originales de los alias, ya que pueden tener valor de información crítica en algunos casos de uso.

Luego, puede hacer una búsqueda simple en el Finder, seleccionar los archivos de su agrado (todos o solo algunos) y luego arrastrarlos y soltarlos en la aplicación de proceso por lotes o el servicio de archivos o el comando del menú Finder.

LA SOLUCIÓN ACTUAL CON QUICKLOOK SOLO FUNCIONA PARCIALMENTE

  1. Finder > Nueva ventana (cmd-N) > Buscar (cmd-F)
  2. Aparecen los criterios de búsqueda, configúrelos de la siguiente manera:
    • "Tipo" es "Otro", escriba "Alias"
    • Aparece una ventana de resultados de búsqueda del Finder.
  3. Ver como lista y ordenar por tamaño.
    • Entonces tienes a los principales culpables del tamaño del archivo en la parte superior.
  4. Si hace QuickLook en un archivo mediante la tecla ESPACIO, no se produce ninguna recreación de alias.
  5. Emita "Archivo > Mostrar original" (cmd-R) en el archivo seleccionado.
  6. En la ventana recién abierta, QuickLook los archivos de alias con ESPACIO.

Luego, se recrean ciertos archivos de alias. ¡Pero no todos!

Funciona, pero solo a veces: PDF, JPEG, ZIP si el controlador es el complemento BetterZip QuickLook.

De estos, no todos los alias se actualizan.

Parece depender también de la aplicación asociada general o individual del archivo (configuración "Abrir con" del buscador, Identificador de tipo uniforme (UTI), bifurcación de recursos TIPO/CREADOR) y qué complemento QuickLook maneja el tipo de archivo.

Un archivo recreado tiene un tamaño de archivo drásticamente reducido (alrededor de 1 KB). Lamentablemente, pierde su marca de tiempo original, pero obtiene la actual (equivalente a /usr/bin/touch). Me encantaría conservar la marca de tiempo del alias.

Si no le importa que se actualice la fecha de modificación de su alias siempre que se conserve la fecha de creación del alias, consulte mi pregunta Recrear alias antiguos de forma masiva para reducir su tamaño de archivo, manteniendo su nombre y fecha de creación . Tiene una solución más simple que el método Quick Look que describiste.

Respuestas (1)

Cree un servicio con Automator: probado en macOS Sierra

  1. Abierto/Applications/Automator.app
  2. Archivo > Nuevo (cmd-N)
    • Elija un tipo de documento: "Servicio".
  3. Servicio recibe seleccionado: "archivos o carpetas" en "Finder".
  4. En el panel izquierdo, vaya a: Acciones > Biblioteca > Utilidades > Ejecutar AppleScript.
    • Arrastre el elemento "Ejecutar AppleScript" desde el panel de biblioteca de la izquierda hasta el panel de código fuente de la derecha.
  5. Borre el contenido precargado por completo. Pegue el siguiente código fuente:

Código fuente de 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. Archivo > Guardar (cmd-S): asígnale un nombre como "Recreación de alias".
  2. Abra Preferencias del sistema> Teclado> Accesos directos> Servicios> Archivos y carpetas> Juego de alias, o como lo haya llamado.
    • Asígnale un atajo. Como cmd-L se usa para crear un alias (L como en "enlace"), le asigné cmd-alt-ctrl-L.
  3. Seleccione uno o varios archivos de alias heredados y procéselos.
    • Con tu atajo cmd-alt-ctrl-L.
    • o a través del menú principal: Finder > Servicios > Archivos y carpetas > Recreación de alias.

Nota : El proceso por lotes es muy transparente y los errores se pueden corregir. Los alias eliminados se mueven a su Papelera. Si ha cometido un error, elija el archivo de alias desechado en cuestión y ejecute Finder > Poner de nuevo (cmd-retroceso). Esto volverá a colocar el archivo en su carpeta principal anterior y abrirá la carpeta principal en una nueva ventana. Luego, tiene el alias recreado y el alias original con el sufijo "copiar" uno al lado del otro y puede hacer correcciones si es necesario.

• ¡Una maravillosa solución que funciona sólidamente! ¡Gracias! • Lo probé minuciosamente: los alias procesados ​​se recrean con éxito con las propiedades requeridas intactas, que son: marca de tiempo, etiquetas múltiples, etiquetas múltiples. Múltiples alias como entrada funcionaron bien. No se procesaron los tipos de archivo incorrectos (≠alias) en la selección de entrada. • Para que esta solución sea lo más accesible posible para muchos usuarios, escribí un instructivo paso a paso muy explícito y editaré su respuesta en consecuencia. Si no se siente bien con esto, dígamelo y lo pondré en una respuesta separada.
En macOS 10.14, el tipo de documento de Automator para crear ahora se llama "Acción rápida". Además, recomiendo crear un comentario en el flujo de trabajo de Automator con un enlace a esta pregunta para que pueda recordar de dónde proviene el AppleScript. Vea cómo crear un comentario en Automator .
En macOS 10.14 Mojave, este AppleScript no conserva la fecha de modificación: los nuevos alias tienen su fecha de modificación establecida en la hora actual. Dado que este AppleScript actualmente no conserva la fecha de modificación, mi respuesta a Recrear alias antiguos de forma masiva para reducir su tamaño de archivo, manteniendo su nombre y fecha de creación es equivalente y más fácil de realizar.