2 votos

Automator - Eliminar archivos con la fecha de modificación de más de 30 días, excepto si, en una carpeta roja

Estoy tratando de hacer un automator calendario de eventos, donde cada viernes, que elimina los archivos cuya fecha de modificación es de más de 30 días; EXCEPTO los archivos dentro de las carpetas marcadas en rojo.

Tengo mis Documentos en una carpeta con 3 archivos, una carpeta creada hoy en día y la etiqueta roja, una carpeta modificado por última vez hace una semana, y un pdf que se modificó hace más de 30 días.

Mi script de automator va como sigue:

[Buscar Buscador de Artículos] Búsqueda de "Documentos", TODOS los siguientes son verdaderas:

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

[Mover El Buscador De Elementos A La Papelera]

//fin

Pero esto mueve el rojo de la etiqueta de la carpeta y el pdf antiguos, cuando sólo debe mover el pdf a la basura.

Alguien me puede ayudar? Gracias!

Edit: la Ejecución de macOS 10.13.3

2voto

qarma Puntos 71

Mi sugerencia inicial para el problema fue la sustitución de las acciones que tiene actualmente en su Automator flujo de trabajo con Ejecutar AppleScript acción que utiliza 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 le han añadido una acción después de esto a la basura esos elementos, o cambio get every item a delete every item en la secuencia de comandos. Sin embargo, como @user3439894 se ha señalado, esto no recorren los árboles de carpetas, por lo que los elementos dentro de una carpeta que tengan más de 30 días (y no se etiqueta roja) de escapar de la detección.

El siguiente script es un ejemplo de un método que utiliza la recursividad a descender por el árbol de directorios de la eliminación de archivos (o marcar para eliminación) como 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

Yo lo he probado brevemente en mi propio bastante compleja estructura de árbol, y parecía funcionar correctamente. Sin embargo, estoy escribiendo esto y las pruebas, mientras que, muy cansado, pero no importa, yo siempre le aconsejo que pruebe esta secuencia de comandos de ti mismo en el maniquí de archivos y carpetas para asegurarse de que funciona. Por favor, informe sobre cómo va, incluyendo-si se presentan, los errores, con los detalles específicos sobre cómo puedo reproducir el error mismo.

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