Ricrea un alias con lo stesso nome e timestamp a livello di programmazione

1

Sviluppiamo un'utilità per elaborare in batch i file degli alias precedenti.

Implementato come:

  • Servizio file del Finder,
  • Flusso di lavoro di Automator,
  • Applescript,
  • shellscript,
  • o qualsiasi altra cosa che quelli il lavoro.

Per ogni file nel batch, questo dovrebbe essere fatto:

  1. Il file è un alias? (evitare altri tipi di file forniti dall'errore dell'utente)
  2. Ottieni il percorso file, il nome file, la data / ora, l'etichetta, i tag.
  3. Elimina.
  4. Ricrea il percorso file originale con il nome file, la data / ora, l'etichetta, i tag determinati

Followup: ho presentato una segnalazione di bug ad Apple, vedi sotto. Forse Apple ha trovato una soluzione. Ma penso che alcuni AppleScripter esperti possano trovare una soluzione in pochi minuti. Sarebbe bello se trovassimo una soluzione qui e la offrissi all'intera comunità macOS.

Segnalazione di bug ad Apple, presentata il 2017-01-10

Finder / HFS + / filesystem - Aggiornamento di file alias legacy per ridurre il file con processo batch

UN LUGLIO DI LUNGA DURATA E 'STATO FACILMENTE FISSATO:

In macOS Sierra la dimensione del file degli alias è stata finalmente ridotta drasticamente, da più megabyte nei sistemi Mac OS X 10.7-10.11 a solo circa 1 KB ora in macOS Sierra 10.12. (Semplicemente non includendo le risorse delle icone, che per la maggior parte in ogni caso ridondanti sono solo una copia di un'icona generica di tipo di file.)

PER FAVORE, OFFRIAMO UN FISSO PER L'ERRORE BUG:

A seconda di quanto pesantemente gli alias vengono utilizzati su un sistema, esiste la possibilità di salvare più GB per alcuni utenti.

Propongo ad Apple di offrire un processo batch per ridurre la dimensione del file dei file alias precedenti. Con un'opzione per conservare i timestamp originali degli alias, in quanto potrebbero avere valore di informazioni critiche in alcuni casi d'uso.

Quindi potresti fare una semplice ricerca del Finder, selezionare i file di tuo gradimento (tutti o solo certi) e quindi trascinarli nell'app del processo batch o nel servizio file o nel comando del menu Finder.

WORKAROUND CORRENTE CON QUICKLOOK FUNZIONA SOLO PARZIALMENTE

  1. Finder > Nuova finestra (cmd-N) > Cerca (cmd-F)
  2. Vengono visualizzati i criteri di ricerca, impostarli come segue:
    • "Tipo" è "Altro", digita "Alias"
    • Viene visualizzata una finestra dei risultati di ricerca del Finder.
  3. Visualizza come lista e ordina per dimensione.
    • Quindi hai i primi colpevoli della dimensione del file in cima.
  4. Se fai QuickLook su un file tramite la chiave SPACE, non si verifica alcuna ricreazione di alias.
  5. Problema "File > Mostra originale" (cmd-R) sul file selezionato.
  6. Nella finestra appena aperta, QuickLook i file alias con SPACE.

Quindi alcuni file alias vengono ricreati. Ma non tutti!

Funzionando, ma solo qualche volta: PDF, JPEG, ZIP se il plugin BetterZip QuickLook è il gestore.

Fuori da questi non tutti gli alias vengono aggiornati.

Sembra dipendere anche dall'applicazione associata complessiva o individuale del file (impostazione "Apri con" del Finder, UTI (Uniform Type Identifier), fork di risorse TYPE / CREATOR) e quale plugin QuickLook gestisce il tipo di file.

Un file ricreato ha una dimensione di file drasticamente ridotta (circa 1 KB). Purtroppo perde il suo timestamp originale, ma ottiene quello corrente (equivalente a / usr / bin / touch). Mi piacerebbe mantenere l'alias timestamp conservato.

    
posta porg 19.01.2017 - 11:48
fonte

1 risposta

2

Crea un servizio con Automator - Testato su macOS Sierra

  1. Apri /Applications/Automator.app
  2. File > Nuovo (cmd-N)
    • Scegli un tipo di documento: "Servizio".
  3. Il servizio riceve selezionato: "file o cartelle" in "Finder".
  4. Nel riquadro di sinistra vai a: Azioni > Libreria > Utilità > Esegui AppleScript.
    • Trascina l'elemento "Esegui AppleScript" dal riquadro della libreria a sinistra nel riquadro del codice sorgente sulla destra.
  5. Cancella completamente il contenuto precompilato. Incolla il seguente codice sorgente:

Codice sorgente 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. File > Salva (cmd-S): Assegna un nome come "Alias ricreazione".
  2. Apri le Preferenze di Sistema > Tastiera > Tasti di scelta rapida > Servizi > File e cartelle > Alias ricreazione, o comunque lo hai nominato.
    • Assegna una scorciatoia. Come cmd-L si usa per creare un alias (L come in "link"), l'ho assegnato a cmd-alt-ctrl-L.
  3. Seleziona uno o più file alias legacy ed elaborali.
    • Con il tuo collegamento cmd-alt-ctrl-L.
    • o tramite il menu principale: Finder > Servizi > File e cartelle > Alias ricreazione.

Nota : il processo batch è molto trasparente e gli errori possono essere corretti. Gli alias cancellati vengono spostati nel cestino. Se hai commesso un errore, scegli il file alias trash in questione ed esegui Finder > Metti indietro (cmd-backspace). Ciò riporterà il file nella sua cartella padre precedente e aprirà la cartella genitore in una nuova finestra. Poi hai l'alias ricreato e l'alias originale con il suffisso "copia" affiancato e puoi apportare correzioni se necessario.

    
risposta data 27.01.2017 - 20:34
fonte

Leggi altre domande sui tag