6 votos

¿Borrar automáticamente los archivos de la carpeta de descargas todos los días a menos que estén etiquetados con "Keep"?

¿Cómo puedo automatizar la eliminación de archivos de mi carpeta de descargas pero conservar los archivos que he etiquetado con "Conservar"? He podido utilizar Automator para eliminar archivos diariamente, pero no puedo trabajar con etiquetas en Automater. Lo más probable es que esto requiera AppleScript (soy bastante nuevo en AppleScript). He creado un AppleScript para eliminar archivos de la carpeta de descargas, pero no funciona (no sé si es un problema de permisos), y no sé cómo funcionan las etiquetas de archivos en AppleScript.

try
    tell application "Finder"
        delete (every item of folder "/Users/wheel58m/Library/Mobile Documents/com~apple~CloudDocs/Downloads")
    end tell

on error
    display dialog ("Error. Couldn't Move the File") buttons {"OK"}
end try

Se agradece cualquier documentación o recurso.

3voto

user3439894 Puntos 5883

¿Borrar automáticamente los archivos de la carpeta de descargas todos los días a menos que estén etiquetados con "Keep"?

Lo siguiente ejemplo AppleScript código puede utilizarse en un shell script con un /usr/bin/osascript shebang o un AppleScript script/aplicación o un Ejecutar AppleScript acción en un Automatizador flujo de trabajo para eliminar cualquier archivo en el targetFolder que no tiene un "Keep" personalizado Etiqueta establecido en Buscador :

-- # targetFolder can be either an HFS path or a POSIX path,
-- # "path:to:target:folder:" or "/path/to/target/folder"
-- # 
-- # Change the value of targetFolder from "/path/to/target/folder"
-- # to the appropriate fully qualified pathname in either form.

set targetFolder to "/path/to/target/folder"

-- # The remaining code should not need to be modified, 
-- # unless the mdfind query needs to be changed.

set targetFolderPOSIXpath to ¬
    the quoted form of ¬
        the POSIX path of targetFolder

set shellCMD to {¬
    "mdfind -onlyin", space, targetFolderPOSIXpath, space, ¬
    "'! kMDItemKind == Folder && ! kMDItemUserTags == Keep'"} ¬
    as string

set posixFilesToDelete to ¬
    paragraphs of ¬
    (do shell script shellCMD)

set filesToDelete to {}
repeat with thisFile in posixFilesToDelete
    set thisFile to POSIX file thisFile as alias
    set the end of filesToDelete to thisFile
end repeat

if filesToDelete is not {} then ¬
    tell application "Finder" to ¬
        delete filesToDelete 

Nota: Desplácese lo necesario para ver el resto código .


Notas:

  • Como no tengo el carpeta de destino mencionado en el OP, no he podido comprobar si hay problemas de permisos que deban abordarse en: Preferencias del sistema > Seguridad y privacidad > Privacidad
  • El ejemplo AppleScript código fue probado y me funcionó sin problemas en MacOS Catalina usando un temporal carpeta creado dentro de mi Inicio carpeta mientras se añade archivos y carpetas a la misma y etiquetando sólo algunos archivos con un "Keep" personalizado Etiqueta en Buscador .
  • En cuanto a "Borrar automáticamente los archivos", hay varias maneras de lograrlo, dependiendo de cómo el ejemplo AppleScript código se utiliza. Se utiliza como AppleScript shell script o aplicación se puede programar para que se ejecute a la hora que se desee, utilizando cualquiera de los diferentes métodos.
    • Como AppleScript aplicación utilizando: Calendario
    • Como AppleScript shell script utilizando: launchd o cron

Nota: El <em>ejemplo </em><strong>AppleScript </strong><em>código </em>es sólo eso y sin ningún tipo de inclusión <em>tratamiento de errores </em>no contiene ningún otro <em>tratamiento de errores </em>según corresponda. Corresponde al usuario añadir cualquier <em>tratamiento de errores </em>como sea apropiado, necesario o deseado. Eche un vistazo a la <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129232" rel="nofollow noreferrer"><strong>pruebe con </strong></a><em>declaración </em>y <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129657" rel="nofollow noreferrer"><strong>error </strong></a><em>declaración </em>en el <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html" rel="nofollow noreferrer"><strong>Guía del lenguaje AppleScript </strong></a>. Véase también, <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_error_xmpls.html#//apple_ref/doc/uid/TP40000983-CH221-SW1" rel="nofollow noreferrer"><strong>Trabajar con errores </strong></a>. Además, el uso de la <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html#//apple_ref/doc/uid/TP40000983-CH216-SW10" rel="nofollow noreferrer"><strong>retraso </strong></a><em>comando </em>puede ser necesario entre eventos cuando sea apropiado, por ejemplo <code>delay 0.5</code> con el <em>valor </em>de la <em>retraso </em>ajustado apropiadamente.

0 votos

¡Wow! Gracias por el detalle. ¡He conseguido que esto funcione perfectamente! Crearé una aplicación AppleScript que se ejecute con Calendar y añadiré la gestión de errores con la documentación que has mencionado. Esto es exactamente lo que necesitaba. Gracias.

0 votos

@wheel58m, realmente no debería necesitar ninguna tratamiento de errores y la nota en la parte inferior es placa de la caldera Por lo general, siempre añado sólo para cubrir las bases, por así decirlo. El código como es en realidad fue probado como un AppleScript aplicación programado en Calendario y funcionó sin problemas. Eso no quiere decir que no se pueda personalizar el código para adaptarse a sus necesidades. Me alegro de que te funcione.

0voto

Wowfunhappy Puntos 33

Por lo que sé, las etiquetas se siguen llamando "tags" en Applescript. Finder devolverá un "índice de etiqueta" diferente dependiendo de la etiqueta de un archivo.

tell application "Finder" to get label index of file "path:to:file"

Cuando un archivo no tiene etiquetas, esto devuelve "0". Cuando un archivo tiene una etiqueta "roja", devuelve 2, y cuando tiene una etiqueta "amarilla", devuelve 3. Cuando un archivo tiene una etiqueta "roja" y una etiqueta "amarilla", todavía devuelve 3.

Todo esto se siente un poco raro/frágil, pero si no puedes encontrar una mejor manera de hacer esto (!), yo haría algunos experimentos para encontrar el "índice de etiquetas" de tu keep y luego comprueba eso en tu código.

0 votos

El problema es que cualquier Buscador artículo con un sistema de Etiqueta su label index propiedad devolverá 0 como cualquier Buscador artículo sin Etiqueta . Así que no se puede diferenciar Buscador artículos con un "Keep" Etiqueta o Buscador artículos sin Etiqueta utilizando su label index propiedad ¡!

2 votos

No tengo ni idea de cómo funciona todo esto, pero he encontrado muchas referencias a las etiquetas como algo distinto a los stackoverflow.com/q/24599917 stackoverflow.com/q/19784075 discussions.apple.com/thread/7741109 & apple.stackexchange.com/q/131258/85275

2 votos

Sólo para añadir a mi primer comentario, lo siento, accidentalmente dejé fuera "sin color asignado" como en... El problema es que cualquier Buscador artículo con un sistema de Etiqueta sin color asignado, su label index propiedad devolverá 0 como cualquier Buscador artículo sin Etiqueta . Perdón por la confusión. --- La forma más segura de lograr el objetivo del PO es utilizar la tecnología nativa. MacOS de los servicios públicos es centrarse en la kMDItemUserTags atributo de metadatos utilizando un mdfind consulta que no es AppleScript pero puede utilizarse junto con ella para lograr el objetivo.

0voto

El siguiente AppleScript es una versión funcional del código que has publicado, si sustituyes <SystemDrive> y <username> con los nombres de la unidad del sistema y el nombre de usuario, respectivamente.

try
    tell application "Finder"
        delete (every item of folder "<SystemDrive>:Users:<username>:Library:Mobile Documents:com~apple~CloudDocs:Downloads")
    end tell

on error
    display dialog ("Error. Couldn't Move the File") buttons {"OK"}
end try

Ver Documentación de Apple sobre cómo trabajar con archivos y carpetas en AppleScript .

No he podido encontrar ninguna mención a las etiquetas en la biblioteca Finder de AppleScript, pero Howard Oakley afirma que ellos puede ser añadidos con AppleScript, por lo que deberían ser accesibles, quizás como etiquetas como sugiere @Wowfunhappy. Es posible que tenga que instalar y aprender a utilizar tag como se menciona en el mismo artículo.

0 votos

¿Cómo es que el AppleScript código en su respuesta evite borrar el archivos que tienen un "Keep" Etiqueta ? No es así. El título de la pregunta pregunta: "¿Borrar automáticamente los archivos de la carpeta de descargas diariamente a menos que estén etiquetados con "Keep"?"

2 votos

Me refería a que hará lo que pretende el código publicado en la pregunta. Luego expliqué cómo podría ir a averiguar cómo acceder a las etiquetas.

1 votos

Gracias, ahora consigo que el script borre los archivos. Sólo me faltaba añadir el nombre de la unidad y sustituir "/" por los dos puntos ":". Solo trato de entender las etiquetas, jaja.

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