Interrumpir trabajo por lotes entre archivos

Interrumpir trabajo por lotes entre archivos

Necesito configurar mi trabajo por lotes bash (comprimiendo archivos de 5.1k en el lugar) de modo que si necesito detener/reanudar el trabajo, esperará hasta que esté "entre" archivos (acaba de terminar uno y no ha iniciado otro).

Mi compresión se vería pigz -9 -- rsnc*si se ejecutara toda a la vez, y estaba contemplando algo como:

ls rsnc* | while read file 
  do pigz -9 -- $file
  if [ -f .intr ]
    then break
  fi
done

¿Es este un medio confiable para lograr mi objetivo? ¿Existe una mejor manera?

Respuesta1

Puede trap [1],[2] la señal Ctrl+ C, la INT y waitpara el final de cada proceso.

#!/bin/bash

trap ctrl_c INT

function ctrl_c() {
        wait   # wait for the end of all child processes    
        exit   # <<--- put here your exit code exit 1, ... 
}

shopt -s nullglob
for f in rsnc*
do
    pigz -9 -- $file &   # Execute in background
    wait  $!             # Wait for the end of the last command 
done

Nota
Hay muchas formas de recorrer todos los archivos de un directorio [3] , pero siempre eses mejor evitar analizar la salida dels [4] .

Referencias

información relacionada