Creando una carpeta comprimida HFS + automatizada

15

Me gustaría configurar una forma automatizada para archivar archivos en OS X Lion. Al archivar, me refiero a usar la función de compresión HFS + en una carpeta específica, y hago que todos los archivos que muevo en esta carpeta se compriman automáticamente. Estoy pensando en usar esto para archivar archivos grandes que no uso con frecuencia, pero sin tener que crear manualmente archivos comprimidos y extraerlos en caso de que los necesite.

Encontré la herramienta afsctool ( brew install afsctool ), que puede, a través de la línea de comandos, aplicar la compresión HFS + a un carpeta y todos los archivos en ella. Pero creo que no activa la compresión de futuros archivos movidos a la carpeta.

Mover archivos manualmente y ejecutar una instrucción de línea de comandos repetidamente es un inconveniente. Por lo tanto, supongo que necesitaría usar automator / AppleScript para ejecutar esto en dos pasos:

  1. Cree un script que permita mover cualquier archivo a una carpeta específica. Lo ideal sería una opción llamada Archivo accesible haciendo clic con el botón derecho en el archivo.
  2. Ejecuta una instrucción de línea de comando afsctool -c <folder> , para activar la compresión en todos los archivos nuevos que se acaban de mover a la carpeta.

No tengo experiencia en el uso de automator o AppleScript, por lo que me gustaría saber dónde comenzar, especialmente sobre cómo agregar acciones al Finder y cómo ejecutar una herramienta de línea de comandos desde un script.

Actualizaciones

La guía @kopischke funciona bien. El script en sí, lo hice en base a la respuesta de @mark, pero usando afsctool -c <folder> , en lugar de ditto . Aquí está el guión: Se debe poner en ~/Library/Scripts/Folder Action Scripts

on adding folder items to this_folder after receiving these_items
repeat with i from 1 to number of items in these_items
    try
        set this_item to item i of these_items
        tell application "Finder"
            set the file_name to the POSIX path of this_item
        end tell
        set cmd to "/usr/local/bin/afsctool -c " & file_name
        do shell script cmd
    on error the error_message number the error_number
        display dialog "Error: " & the error_number & ". " & the error_message buttons {"OK"} default button 1

    end try
end repeat
end adding folder items to

Ya que afsctool en MobileMe ya no está disponible, hay diimdeep / afsctool en GitHub, actualmente 1.6.4.

También afsctool en MacPorts , donde están al tanto del problema de MobileMe pero quizás Desconocía la fuente en GitHub.

    
pregunta Boj 05.05.2012 - 13:20

4 respuestas

5

La respuesta a tu pregunta tiene dos partes.

  1. Cómo agregar un elemento del menú contextual del Finder a los archivos "Archivar": esto es fácil de lograr al crear un Automator Service (Mac OS X Automation tiene una buena descripción general de lo que pueden hacer los servicios de Automator introducidos en OS X 10.6):

    • Inicie Automator, elija "Servicio" cuando se le solicite el tipo de flujo de trabajo que desea crear.
    • Elija "Archivos o carpetas" en el menú desplegable "El servicio recibe" (traducciones aproximadas: estoy en un sistema alemán). Opcionalmente, establezca "en" desplegable a "Finder".
    • Agrega una acción "Obtener los elementos seleccionados del buscador".
    • Agregue las acciones de "Mover elementos del buscador" debajo de eso y configúrelas en su carpeta de destino.
    • Guarde su servicio en la ubicación predeterminada ( ~/Library/Services ) como "Archivo".

    ahora tiene un nuevo menú de servicio y entrada de menú de contexto (según la cantidad de servicios activos: ya sea en el primer nivel del menú o en el submenú "Servicios") llamado "Archivo" que moverá el archivo o carpeta seleccionado a su carpeta de destino.

  2. Cómo automatizar la compresión HFS + de los archivos agregados a su carpeta de destino: hay varias formas de lograrlo. Por supuesto, simplemente puede agregar ese paso a su servicio de archivo. La desventaja de este enfoque es que no se aplicará ninguna compresión si, por supuesto, se agregan archivos o carpetas a la carpeta fuera del servicio. Un mejor enfoque sería tener todo en la carpeta comprimido automáticamente, sin depender del vector de entrada o la interacción del usuario.

    Una de las formas es, como ha descubierto, tener una utilidad de compresión ejecutada cada vez que se agrega un archivo o carpeta a su carpeta vigilada:

    • la forma de iniciar una utilidad de shell en AppleScript es < comando do shell script : consulte la documentación vinculada;
    • la forma integrada de aprovechar los eventos del sistema de archivos en un AppleScript es utilizar Acciones de carpeta , que llaman a AppleScripts sobre los cambios en una carpeta vigilada. Los eventos a los que reacciona el script están definidos por el propio script, a través de los controladores que proporciona (por ejemplo, el script en respuesta de Mark tiene un controlador para adding folder items , lo que significa que reacciona a los archivos recién agregados; consulte la Guía del lenguaje Applescript para la referencia completa ). La configuración de Acciones de carpeta se encuentra en el menú de servicios de carpetas en el Finder (también en el menú de contexto).
    • una alternativa turbo a Folder Actions es Hazel de Paul Kim (software comercial), que agrega el procesamiento basado en reglas y una gran cantidad de criterios para el manejo de eventos del sistema de archivos que van mucho más allá de lo que puede lograr con las simples Acciones de la Carpeta; es posible que desee investigar Hazel si planea hacer cosas más o más complejas en la línea de lo que está planeando. ahora.

    Una alternativa a todo el enfoque de scripting es utilizar Clusters de LateNiteSoft - otro software comercial, que no hace nada sino automáticamente aplique (y vuelva a aplicar, cuando sea necesario) la compresión HFS + al contenido de las carpetas vigiladas.

respondido por el kopischke 07.05.2012 - 11:32
5

@williamvoor: el script falla con rutas de archivo que contienen espacios, ya que set the file_name to the POSIX path of this_item no se escapa correctamente. Corrija la línea apropiada de su código para esto:

set cmd to "/Users/sn/bin/bin/afsctool -c \"" & file_name & "\""

Explicación : el argumento nombre_archivo de afcstool está rodeado de comillas, que a su vez en el código de AppleScript se escapan para ser entregadas correctamente al entorno de línea de comandos.

Meta-tema : Como carezco de puntos de reputación, no pude comentar en la posición apropiada (= a la propia publicación de @williamvoor), por lo tanto, la publico como una respuesta propia y pregunto Puede editar el cambio de código en su publicación y darme un visto bueno para que obtenga la reputación suficiente, lo que me permite comentar directamente en el futuro. Gracias!

Después de eso, yo o el administrador podré eliminar mi publicación.

    
respondido por el porg 23.12.2012 - 20:22
3

Este subproceso proporciona un applecript para usar como una acción de carpeta que comprime los archivos a medida que se agregan

on adding folder items to thisFolder after receiving theseItems
    set destinationPath to "/POSIX path/to/destination/folder"
    repeat with thisItem in theseItems
        set cmd to "ditto --hfsCompression " & quoted form of POSIX path of thisItem & " " & destinationPath
        do shell script cmd with administrator privileges
    end repeat
end adding folder items to
    
respondido por el Mark 05.05.2012 - 17:42
0

Clusters

  

... aprovecha la tecnología de compresión de archivos en Mountain Lion, Lion y Snow Leopard ...

Compresión de la carpeta MoreSpace

  

... La compresión HFS + tiene el mejor efecto en formatos de archivo no comprimidos, como documentos de texto y datos, bases de datos y buzones. Un tamaño de buzón de correo típico se puede reducir hasta un 50%. ...

Preferencia

De esos dos, creo que los Clusters son más maduros y más fáciles de usar, probablemente mejor para esta pregunta.

Proceda con precaución

En un caso de ventaja, puede ocurrir un bloqueo de datos silencioso con usos de terceros de AppleFSCompression. Por lo que puedo decir, esto es un error en el sistema operativo, y puede ocurrir solo cuando hay una falta extraordinaria de espacio libre. Voy a alimentar el error a Apple.

    
respondido por el Graham Perrin 30.03.2013 - 15:37

Lea otras preguntas en las etiquetas