¿Cómo creo una secuencia de comandos de acción de carpeta para tar los elementos que se colocan en la carpeta?

5

Me gustaría soltar / copiar archivos / carpetas y hacer que se compriman y luego se copien en mi escritorio. Esto es lo que sé hasta ahora ... y no es mucho por lo que cualquier ayuda sería apreciada.

on adding folder items to theFolder after receiving theAddedItems
repeat with x in theAddedItems

Esto creará mi lista de archivos colocados en la carpeta. Ahora mi comando de compresión ...

tar cvf - *variableForFileListHere* | gzip -9 - > files.tar.gz

De alguna manera, sé que tengo que alimentar la lista "theAddedItems" creada en la primera parte de la secuencia de comandos al comando tar. Pero no tengo ni idea de cómo podría hacerse esto. Ahora estoy leyendo sobre tar y sus opciones, ya que estoy seguro de que hay una función "incluir" para señalar una lista de elementos para agregar al archivo.

    
pregunta BsdHelper 22.08.2013 - 17:06

3 respuestas

4

Prueba:

on adding folder items to theFolder after receiving theAddedItems
    set myList to {}
    repeat with x in theAddedItems
        set end of myList to quoted form of x's POSIX path & space
    end repeat
    set myList to text 1 thru -2 of (myList as text)
    do shell script "tar cvf " & myList & " | gzip -9 - > ~/Desktop/files.tar.gz"
end adding folder items to
    
respondido por el adayzdone 22.08.2013 - 18:19
7

En lugar de pasar su tiempo con Folder Actions (que yo, y muchos otros, consideramos poco confiables), ¿puedo sugerirle que pruebe a Hazel?

enlace

Descargos de responsabilidad: Comenzaré diciendo que no es gratis (es de US $ 28), pero si le gusta la automatización, este es el lugar para comenzar. Hay una prueba gratuita de 14 días. No tengo ninguna relación con la empresa, excepto como un usuario extremadamente feliz.

Hazel te permite crear 'acciones de carpeta' muy fácilmente usando una GUI agradable que es similar a la creación de reglas de Mail.app. Puede tomar medidas según el nombre de archivo, la extensión, el tipo (es decir, "imágenes, documentos, películas") y muchos otros.

Aquí está la regla que utilizo para cualquier archivo / carpeta agregada a ~ / Action / ZipIt /

Hazelbuscacualquierarchivoqueaúnnoseaunarchivo(podríahaberledichoqueactúesobrecualquierarchivo,peroquieroevitarcomprimirarchivosqueyaestáncomprimidos).Podríaagregarotroscriterios(quepodríanseropcionesorequisitos,comolasdeclaracionesbooleanas"AND" u "OR").

Lo que sea que sea se archivará, luego se moverá al escritorio, luego se me mostrará en el Finder.

¿Ver el pequeño botón "Opciones" junto a 'Mover al escritorio'? Haz clic en eso y puedes decirle a Hazel qué hacer si detecta que el archivo que vas a mover es un duplicado.

También hay una opción para que Finder aparezca en primer plano o no.

Hay muchas otras acciones que Hazel puede hacer además del archivo:

(Nota: iPhoto y Aperture aparecen en gris porque no los tengo instalados).

Las opciones para ejecutar AppleScript / Automator / shell scripts significa que tienes el poder de hacer casi cualquier cosa que puedas imaginar.

Podría seguir y seguir, pero aquí hay un ejemplo más: Tengo Hazel watch ~ / Downloads / para archivos .zip. Cuando los encuentra, los descomprime en ~ / Action / Unzipped / (puede hacer esto diciéndole a Archive Utility que use esa carpeta, o use The Unarchiver). Hazel luego busca en ~ / Acción / Descomprimido / archivos nuevos que terminan con .app y, si los encuentra, los mueve a / Aplicaciones / y los abre. Voilà! Instalación instantánea de aplicaciones.

En el mundo de las aplicaciones de 99 ¢, $ 28 probablemente suene como un gasto enorme, pero para mí Hazel es una de esas herramientas que toma algo que Apple hizo, pero no muy bien (Folder Actions), y lo reemplaza con algo que te pregunto por qué Apple no lo hizo. Obtienes una prueba de 2 semanas y un desarrollador dedicado que ha trabajado en esta aplicación durante años y que es muy bueno respondiendo preguntas de soporte.

Lamento sonar como un fanboi, pero cuando se trata de Hazel y algunas otras aplicaciones de Mac, realmente lo soy.

    
respondido por el TJ Luoma 22.08.2013 - 18:06
0

Hay otra opción.

En lugar de una Acción de carpeta (y los problemas inherentes a ellos), podría usar QueueDirectories en launchd para llamar a un script de shell.

Por ejemplo, esto llamará al script /usr/local/bin/mktgz.sh cada vez que se coloque un archivo en /Users/foo/Action/Gzip

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.tjluoma.mktgz</string>
    <key>Program</key>
    <string>/usr/local/bin/mktgz.sh</string>
    <key>QueueDirectories</key>
    <array>
        <string>/Users/foo/Action/Gzip</string>
    </array>
</dict>
</plist>

Tengo una versión más desarrollada de esto disponible en enlace .

    
respondido por el TJ Luoma 24.08.2013 - 22:47

Lea otras preguntas en las etiquetas