Cómo crear un servicio de Automator para ejecutar un script en todos los archivos de una carpeta

2

Quiero crear un servicio utilizando Automator para ejecutar un script de shell en todos los archivos de una carpeta, por ejemplo, eliminar todos los archivos de registro. Lo que he hecho es

  1. Creó un nuevo servicio en automator.
  2. Se agregó una acción "Ejecutar script de shell". He cambiado esto a 'pwd' por ahora.
  3. El "Servicio recibe las carpetas seleccionadas" seleccionado.
  4. Intenté ejecutarlo, pero recibe un mensaje. "Para probar este servicio dentro de Automator, agregue la acción" Obtener elementos del buscador especificados "al comienzo de su flujo de trabajo. Quite o deshabilite la acción antes de ejecutar el flujo de trabajo fuera de Automator.
  5. está bien. Así que agrego "Obtener elementos del buscador especificados". Se agregó un directorio de 'prueba' a la lista de elementos.

Ahora, cuando ejecuto el script, la ventana de resultados imprime mi directorio de inicio.

En otros lugares, he leído que tal vez necesito agregar

cd "$1"

al principio de mi script. Hice eso pero todavía imprime mi directorio personal. ¿Cómo consigo esta cosa para imprimir el directorio que he seleccionado en "Obtener elementos del buscador especificados"?

Editado para agregar

Aquí hay una captura de pantalla de un script que funciona.

Aquíhayunacapturadepantalladeunscriptquenofunciona.

Laformahabitualenquetrataríaelerror"no se encontró coincidencia: * .log" sería redirigir la salida de error a nula. Sustituyendo la línea "rm" por

find . -name "*.log" -print0 | xargs -0 rm -rf

Funciona sin embargo. Esto parece más difícil de lo que debería ser.

    
pregunta pheon 23.03.2016 - 21:58

1 respuesta

2

Si está creando un Servicio utilizando RunShell Script al que desea pasar las Carpeta (s) seleccionadas a la RunShell Script y haga que se realicen acciones adicionales en el script en ellos, luego comience con esta configuración.

Crea el servicio:

  1. Abre Automator y selecciona Servicio o Archivo > Nuevo > Servicio Si Automator ya está abierto.

  2. Establezca El servicio recibe seleccionado en carpetas y en en Buscador .

  3. Agregue un Ejecución del script de shell Acción , configurando Shell: en / bin / bash y Pase la entrada: a
    como argumentos . Esto cambia el código predeterminado de cat a:

    for f in "$@"
    do
        echo "$f"
    done
    

Ahora puede usar $f para actuar en la Carpeta (s) objetivo, por ejemplo. cd $f y ahora está en el directorio de $f y puede agregar código para actuar sobre los archivos / carpetas dentro de $f , etc.

Actualizar:

Utilice el siguiente código de trabajo como ejemplo:

for d in "$@"; do
    cd "$d"
    for f in *.log; do    
        rm "$f"
    done
done

Dentro de las carpetas Prueba y Copia de prueba había una serie de archivos .log y archivos con otras extensiones también. Cuando se ejecutó el código anterior, solo se eliminaron los archivos * .log dentro de las carpetas de destino, como se muestra en las imágenes a continuación, utilizando dos carpetas o una carpeta y ambos archivos y carpetas con / sin espacios en sus nombres.

    
respondido por el user3439894 23.03.2016 - 22:51

Lea otras preguntas en las etiquetas