0 votos

¿Cómo puedo hacer que Automator ejecute el servicio que hice (shell script) y mostrar la salida en Terminal?

Hola soy nuevo en Macs y OSX, estoy usando p7zip cli para comprimir carpetas con archivos grandes dentro (1; 2 GB o más). Así que me las arreglé para hacer un Bash script</strkeep><strkeep> para hacerlo en proceso por lotes cuando me voy a la cama y no estoy usando el ordenador.

Este es el código:

#!/bin/bash
 for folder in */
 do
 7z a -t7z -m0=lzma2 -mx=9 -mfb=64 -md=1024m -ms=on -mmt2 "${folder%/}.7z" "$folder"
 done

Tengo esto en Comp7zip.sh pongo ese archivo dentro de la carpeta principal que contiene todas las demás subcarpetas que quiero comprimir. Así que desde la terminal hago:

$cd myfolder
$./Comp7zip.sh

Luego en la terminal puedo ver cómo funciona la aplicación 7z, y comprime todas las carpetas sin problemas.

Pero como es un poco molesto, copiar el archivo .sh dentro de la carpeta y usar la terminal cada vez, uso Automator para crear un servicio y hacerlo con un par de clicks, este es el código:

#!/bin/bash
cd "$@"
for folder in */
do /usr/local/bin/7z a -t7z -m0=lzma2 -mx=9 -mfb=64 -md=1024m -ms=on -mmt2 "${folder%/}.7z" "$folder"
done

Es casi lo mismo, sólo hay que añadir el cd "$@" para usar la carpeta seleccionada en el finder, así que tengo un nuevo servicio que hace lo mismo que el .sh lo hace.

Simplemente selecciono la carpeta que tiene todas las subcarpetas que quiero comprimir, luego elijo mi servicio desde el menú contextual del Finder, funciona bien y comprime todas las carpetas dentro de la carpeta seleccionada.

El problema es que de esta manera no puedo ver la aplicación 7z mientras está trabajando, toda la compresión se hace en segundo plano con sólo un icono de un pequeño engranaje en la barra de menú que indica que la compresión se está ejecutando, y nada más.

Así que con archivos pequeños esto no es un problema la compresión termina rápido, pero con archivos grandes, no puedo ver como el trabajo de compresión lo hace.

Así que la pregunta es, ¿cómo puedo hacer que Automator me muestre la tarea en ejecución de la misma manera que lo hace el método con el archivo .sh Bash?

También, ¿alguna idea de cómo añadir a este proceso una forma de comprimir archivos fuera de las subcarpetas de la carpeta seleccionada? Quiero decir que todo este código sólo funciona con carpetas y su contenido, pero no con archivos, así que ¿cómo puedo hacer que funcione con carpetas y archivos en el mismo proceso?

Siento mi gramática, el inglés no es mi lengua materna.

0 votos

Con muchas de las aplicaciones de compresión, basta con arrastrar la carpeta al icono de la aplicación para que la carpeta y el contenido se compriman, normalmente con una barra de progreso mostrada en el icono.

0 votos

Eso ya lo sé, pero normalmente esas aplicaciones no dejan configurar la compresión máxima, o son sólo zip, en este caso el compresor es 7z y el comando que puse da uno de los mejores ratios de compresión y son ideales para archivos grandes.

1voto

Wowfunhappy Puntos 33

Si ejecuta un shell script por:

  1. Abrir la aplicación Terminal
  2. Indicando a la aplicación Terminal que inicie su script</strkeep><strkeep>

Entonces la salida del script se mostrará, por defecto, dentro de la ventana de la Terminal (esto se puede cambiar, por ejemplo, redirigiendo la salida a un archivo de texto con el comando > carácter). Esto es lo que ha estado haciendo "antes de acostarse".

Sin embargo, los scripts scripts pueden también se ejecuta sin necesidad de abrir la aplicación Terminal. Por ejemplo, puedes crear un plist launchd para ejecutar un script de shell cada vez que tu ordenador termine de arrancar. En este caso, el script se ejecutaría, pero no se mostraría nada en pantalla, porque la aplicación Terminal nunca se abrió.

Del mismo modo, la función de Applescript do shell script ejecuta directamente el código del shell sin necesidad de abrir el Terminal.

En lugar de ejecutar el código del shell directamente, tell la aplicación Terminal para que ejecute el código shell por ti :

tell application "Terminal"
  do script "echo 'Hello World'"
end tell

Ahora, Applescript abrirá una ventana de Terminal, y ejecutará su código shell dentro de ella.

Screenshot

0 votos

Gracias por la respuesta, ya he intentado hacerlo de esta manera y el scritp no funciona, los problemas son, el script necesita saber cuales son las carpetas a comprimir, y con el método "tell aplicaion" el applescript no pasa esa información al script. Con el archivo .sh se necesita copiar el archivo .sh dentro de la carpeta principal y luego : para la carpeta en */ decir lo que se debe comprimir. con el método automator el : cd "$@"

0 votos

Cd "$@" dile al scriptque entre en la carpeta seleccionada y comprima todas las subcarpetas. No se como hacerlo funcionar con applescript, no encuentro la forma de indicar en que carpeta esta lo que se tiene que comprimir, claro que no tengo conocimientos de programación, logro hacer el primer bash script solo leyendo la wiki de bash y la wiki de 7z, estoy aprendiendo, por eso pregunto, soy totalmente noob en Mac y applescript. LOL.

0 votos

@TulkasLE Espero que esto no parezca mezquino, pero legítimamente estoy encontrando tus comentarios difíciles de leer con todos los errores ortográficos y gramaticales. Si lo limpiases, yo puede poder ayudarte más.

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