Automator - Eliminazione di file con data modificata di età superiore a 30 giorni, tranne se in una cartella etichettata in rosso

1

Sto provando a fare un evento del calendario degli automatori dove ogni venerdì cancella i file la cui data è stata modificata più di 30 giorni; ECCETTO i file all'interno delle cartelle etichettati in rosso.

Ho la mia cartella Documenti con 3 file, una cartella creata oggi ed etichettata in rosso, una cartella modificata una settimana fa e un pdf che è stato modificato più di 30 giorni fa.

Il mio script per l'automazione è il seguente:

[Trova elementi Finder] Cerca "Documenti", TUTTI i seguenti sono vere:

-Date last modified is not in the last 30 days
-Label is not red

[Sposta elementi del Finder nel Cestino]

// end

Ma sposta la cartella con etichetta rossa e il pdf precedente, quando dovrebbe spostare solo il pdf nel cestino.

Qualcuno può aiutarmi? Grazie!

Modifica: esecuzione di macOS 10.13.3

    
posta dariasx1 23.02.2018 - 04:06
fonte

1 risposta

1

Il mio suggerimento iniziale sul problema era di sostituire le azioni che hai attualmente nel tuo flusso di lavoro Automator con un'azione Esegui AppleScript che usa questo comando:

    tell application "Finder" to get every item ¬
        in the (path to documents folder) ¬
            whose modification date < ((current date) - 30 * days) ¬
            and label index is not 2

Avresti quindi aggiunto un'azione dopo questo per cancellare quegli elementi, o cambiare get every item in delete every item nello script. Tuttavia, come sottolineato da @ user3439894 , questo non attraverserà gli alberi delle cartelle, quindi tutti gli elementi all'interno di una cartella che sono più vecchi di 30 giorni (e non contrassegnati in rosso) sfuggiranno al rilevamento.

Il seguente script è un esempio di un metodo che utilizza la ricorsione per discendere attraverso l'albero delle directory cancellando i file (o contrassegnandoli per l'eliminazione) come va:

    property D : {}  # The files to delete
    property R : path to documents folder  # The root of the directory tree structure
    property age : 30 * days
    property red : 2


    descend into R

    # tell application "Finder" to delete D
    return D


    to descend into here
        local here

        tell application "Finder"

            # Mark files which are older than 30 days for deletion
            # EXCEPT any that are tagged red
            set end of D to every file in here whose label index is not red ¬
                and modification date < (current date) - age

            # This checks to see if, following the purge, the 
            # current folder will become empty.  If so, it can 
            # be deleted too.  It adds to processing time, so
            # remove this code block if you don't need it.
            count the last item of D
            if the result is equal to (count the files in here as alias list) ¬
                and (count the folders in here) is 0 then
                set the end of D to here
                return
            end if

            # This ensures folders tagged red and their contents
            # are spared from the purge
            get the folders in here whose label index is not 2

            repeat with F in the result
                set F to the contents of F  # de-referencing

                descend of me into F
            end repeat

        end tell
    end descend

L'ho testato brevemente sulla mia struttura ad albero abbastanza complessa, e sembrava funzionare con successo. Tuttavia, sto scrivendo questo e testandolo mentre ero abbastanza stanco, ma a prescindere, ti consiglio sempre di testare questo script da solo su file e cartelle fittizie per assicurarti che funzioni. Per favore riporti come va, incluso - se si presentano - eventuali errori, con dettagli specifici su come posso riprodurre personalmente l'errore.

    
risposta data 23.02.2018 - 17:25
fonte

Leggi altre domande sui tag