Automator - Eliminar archivos con fecha de modificación anterior a 30 días, excepto si está en una carpeta etiquetada en rojo

1

Estoy tratando de hacer un evento de calendario automatizador donde todos los viernes, borra los archivos cuya fecha de modificación tiene más de 30 días; EXCEPTO los archivos dentro de las carpetas etiquetadas en rojo.

Tengo mi carpeta Documentos con 3 archivos, una carpeta creada hoy y etiquetada en rojo, una carpeta que se modificó por última vez hace una semana y un pdf que se modificó hace más de 30 días.

El script de mi automator es el siguiente:

[Buscar elementos del buscador] Buscar "Documentos", TODOS los siguientes son verdaderos:

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

[Mover elementos del buscador a la Papelera]

// fin

Pero esto mueve la carpeta con la etiqueta roja y el pdf anterior, cuando solo debería mover el pdf a la papelera.

¿Puede alguien ayudarme? ¡Gracias!

Editar: Ejecutando macOS 10.13.3

    
pregunta dariasx1 23.02.2018 - 04:06

1 respuesta

0

Mi sugerencia inicial al problema fue reemplazar las acciones que tiene actualmente en su flujo de trabajo Automator con una acción Ejecutar AppleScript que usa este 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

Luego, habría agregado una acción después de esto para desechar esos elementos, o cambiar get every item a delete every item en el script. Sin embargo, como lo señaló @ user3439894 , esto no atravesará los árboles de carpetas, por lo que cualquier elemento dentro de una carpeta que se encuentre más de 30 días (y no etiquetado en rojo) escapará a la detección.

La siguiente secuencia de comandos es un ejemplo de un método que utiliza la recursión para descender a través del árbol de directorios, eliminando archivos (o marcándolos para eliminarlos) a medida que avanza:

    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

Lo probé brevemente en mi propia estructura de árbol bastante compleja, y pareció funcionar correctamente. Sin embargo, estoy escribiendo esto y probándolo mientras estoy bastante cansado, pero independientemente de eso, siempre recomendaría encarecidamente que pruebe este script en archivos y carpetas ficticios para asegurarse de que funciona. Por favor, informe sobre cómo va, incluyendo, si surgen, cualquier error, con detalles específicos sobre cómo puedo reproducir el error yo mismo.

    
respondido por el CJK 23.02.2018 - 17:25

Lea otras preguntas en las etiquetas