2 votos

Recrear un alias con el mismo nombre y marca de tiempo mediante programación

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

Implementado como:

  • Servicio de archivos Finder,
  • Flujo de trabajo de Automator,
  • Applescript,
  • Shellscript,
  • o cualquier otra cosa que haga el trabajo.

Esto debe hacerse por cada archivo del lote:

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

Seguimiento: He presentado un informe de error a Apple, véase más abajo. Tal vez Apple encuentre una solución. Pero creo que algún experto en AppleScripter puede 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 MacOS.


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

Finder / HFS+ / sistema de archivos - Actualización de los archivos de alias heredados para reducir el tamaño de los archivos con un proceso por lotes

UN ERROR DE LARGA DURACIÓN FUE AFORTUNADAMENTE CORREGIDO:

En MacOS Sierra el tamaño de los archivos de los alias se redujo finalmente de forma drástica, pasando de varios megabytes en los sistemas Mac OS X 10.7-10.11 a tan sólo 1 KB ahora en MacOS Sierra 10.12. (Simplemente al no incluir los recursos de los iconos, que en su mayoría eran redundantes al ser sólo una copia de un icono de tipo de archivo genérico).

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

Dependiendo de la intensidad de uso de los alias en un sistema, existe la posibilidad de ahorrar varios GB para algunos usuarios.

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

Entonces podrías hacer una simple búsqueda en el Finder, seleccionar los archivos que quieras (todos o sólo algunos) y luego arrastrarlos a la aplicación de proceso por lotes o al servicio de archivos o al comando de menú del Finder.

LA SOLUCIÓN ACTUAL CON QUICKLOOK SÓLO FUNCIONA PARCIALMENTE

  1. Buscador > Nueva ventana (cmd-N) > Buscar (cmd-F)
  2. Aparecen los criterios de búsqueda, configúrelos de la siguiente manera:
    • "Tipo" es "Otro", escribe "Alias"
    • Obtendrás una ventana de resultados de búsqueda en el Finder.
  3. Ver como lista y ordenar por tamaño.
    • Luego tienes a los principales culpables del tamaño de los archivos en la parte superior.
  4. Si se hace una búsqueda rápida de un archivo mediante la tecla ESPACIO, no se recrea ningún alias.
  5. Emita "Archivo > Mostrar original" (cmd-R) en el archivo seleccionado.
  6. En la nueva ventana abierta, busque rápidamente los archivos de alias con SPACE.

Entonces se recrean ciertos archivos de alias. Pero no todos.

Funciona, pero sólo a veces: PDF, JPEG, ZIP si el plugin BetterZip QuickLook es el manejador.

De estos, no todos los alias se actualizan.

Parece que también depende de la aplicación general o individual asociada al archivo (configuración de "Abrir con" del Finder, identificador de tipo uniforme (UTI), bifurcación de recursos TYPE/CREATOR) y del plugin de QuickLook que 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 gustaría mantener la marca de tiempo del alias.

3voto

Baczek Puntos 150

Crear un servicio con Automator - Probado en MacOS Sierra

  1. Abrir /Applications/Automator.app
  2. Archivo > Nuevo (cmd-N)
    • Elija un tipo de documento: "Servicio".
  3. El servicio recibe seleccionado: "archivos o carpetas" en el "Finder".
  4. En el panel de la izquierda navegue a: Acciones > Biblioteca > Utilidades > Ejecutar AppleScript.
    • Arrastre el elemento "Ejecutar AppleScript" desde el panel de la biblioteca a la izquierda hasta el panel del código fuente a la derecha.
  5. Borrar 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): Dale un nombre como "Alias recreación".
  2. Abre Preferencias del Sistema > Teclado > Accesos directos > Servicios > Archivos y carpetas > Recreación de alias, o como sea que lo hayas nombrado.
    • Asigna un acceso directo. Como cmd-L se utiliza para crear un alias (L como en "link"), le asigné cmd-alt-ctrl-L.
  3. Seleccione uno o varios archivos de alias heredados y procéselos.
    • Con su 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 se pueden corregir los errores. Los alias borrados se mueven a su papelera. Si ha cometido un error, elija el archivo de alias eliminado en cuestión y ejecute Finder > Volver a colocar (cmd-backspace). Esto devolverá el archivo a su carpeta principal anterior y abrirá la carpeta principal en una nueva ventana. Entonces tendrá el alias recreado y el alias original con el sufijo "copia" uno al lado del otro y podrá hacer correcciones si es necesario.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X