Crear una carpeta comprimida HFS + automatizada


17

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 hacer que cada archivo que muevo a esta carpeta se comprima 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 tener que 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 compresión HFS + a una carpeta y a todos los archivos que contiene . 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 comando repetidamente es inconveniente. Por lo tanto, supongo que necesitaría usar el automatizador / AppleScript para ejecutar esto en dos pasos:

  1. Cree un script que permita mover cualquier archivo a una carpeta específica. Idealmente, una opción llamada Archivo accesible mediante clic derecho en el archivo.
  2. Ejecute una instrucción de línea de comando afsctool -c <folder>para activar la compresión en todos los archivos nuevos que acaba de mover a la carpeta.

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


Actualizaciones

@kopischke guía 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

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

También afsctool en MacPorts, donde conocen el problema de MobileMe pero tal vez desconocen la fuente en GitHub.


Buena pregunta. ¿Qué tasas de compresión se pueden esperar de esto?
n1000

Respuestas:


6

Hay dos partes en la respuesta a su pregunta.

  1. Cómo agregar un elemento del menú contextual del Finder a los archivos "Archive": esto es fácil de lograr mediante la creación de un Servicio de Automator (Mac OS X Automation tiene una buena visió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 el menú desplegable "en" en "Finder".
    • Agregue una acción "Obtener elementos del buscador seleccionados".
    • Agregue las acciones "Mover elementos del Finder" debajo de eso y configúrelo 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ú contextual (dependiendo del número de servicios activos: ya sea en el primer nivel de menú o en el submenú "Servicios") llamado "Archivo" que moverá el archivo o carpeta seleccionado a su destino carpeta.

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

    Una forma es, como descubrió, hacer que se ejecute una utilidad de compresión cada vez que se agrega un archivo o carpeta a su carpeta vigilada:

    • la forma de iniciar una utilidad de shell en AppleScript es el do shell scriptcomando : consulte la documentación vinculada;
    • La forma incorporada de aprovechar los eventos del sistema de archivos en un AppleScript es usar acciones de carpeta , que llaman a AppleScripts en los cambios en una carpeta vigilada. Los eventos a los que reacciona el script están definidos por el script en sí, a través de los controladores que proporciona (por ejemplo, el script en la 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 obtener la referencia completa ) . La configuración de Acciones de carpeta se encuentra en el menú de servicios de carpetas en Finder (también en el menú contextual).
    • Una alternativa turboalimentada a Folder Actions es Paul Kim's Hazel (software comercial), que agrega un 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 simples acciones de 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ás planeando ahora.

    Una alternativa a todo el enfoque de secuencias de comandos está utilizando de LateNiteSoft Clusters - otro software comercial, que no hace más que aplicar de forma automática (y volver a aplicar, cuando sea necesario) HFS + compresión al contenido de las carpetas controladas.


Gracias por tu respuesta. Probaré la opción de ejecutar un AppleScript como acción de carpeta. Soy consciente de los Clusters, y lo que estoy tratando de lograr es exactamente eso (Clusters de un hombre pobre);)
Boj

@williamvoor: Me alegra si pudiera ayudar. ¿Te importaría aceptar la respuesta, entonces? Ese es el botón de marca de verificación :).
kopischke

La solución de script de acción de carpeta funciona. El guión en sí lo pegué en la pregunta.
Boj

5

@williamvoor: el script falla con las rutas de archivo que contienen espacios, ya set the file_name to the POSIX path of this_itemque 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, las cuales se escapan en el código AppleScript para poder ser entregadas correctamente al entorno de línea de comando.

Metatema : como me faltan puntos de reputación, no pude comentar en la posición adecuada (= a la publicación de @williamvoor), por lo tanto, lo publico como una respuesta propia y le pido que edite el cambio de código en su publicación, y denme me gusta, para que gane suficiente reputación, lo que me permitirá comentar directamente en el futuro. ¡Gracias!

Una vez hecho esto, yo o el administrador podría eliminar mi publicación.


3

Este hilo 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

No sabía sobre la --hfsCompressionopción en ditto- ¡buena! Pero su respuesta no responde a la pregunta de OP sobre la integración de un script en movimiento en Finder, mueve los archivos que caen en la carpeta de archivo a otra carpeta (que creo que sería una redirección más de lo que OP planeaba hacer) y solicitará autenticación cada vez (molesto en un contexto de automatización).
kopischke

0

Racimos

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

MoreSpace Carpeta de Compresión

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

Preferencia

De esos dos, encuentro que los Clusters son más maduros y fáciles de usar, probablemente una mejor opción para esta pregunta.


Proceda con precaución

En un caso extremo, se pueden producir datos silenciosos con usos de AppleFSCompression por parte de terceros. Por lo que puedo decir, esto es un error en el sistema operativo, y puede ocurrir solo donde hay una extraordinaria falta de espacio libre. Alimentaré el error a Apple.


1
Ambos parecen haber sido descontinuados ahora.
EpicVoyage
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.