Interromper o trabalho em lotes entre arquivos

3

Eu preciso configurar meu trabalho em lote bash (compactando arquivos 5.1k no local) para que, se eu precisar parar / retomar o trabalho, ele espere até que ele esteja "entre" arquivos (acabou de terminar um e não iniciou outro ).

Minha compactação seria parecida com pigz -9 -- rsnc* se todas fossem executadas de uma vez e eu estivesse pensando em algo como:

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

Esse é um meio confiável de alcançar meu objetivo? Existe uma maneira melhor?

    
por Camden Narzt 08.12.2015 / 00:42

1 resposta

2

Você pode trap [ 1 ], [ 2 ] a Ctrl + C signal, o INT, e wait para o final de cada processo.

#!/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
Há muitas maneiras de percorrer todos os arquivos em um diretório [ 3 ] , mas é sempre melhor evitar analisar a saída de ls [ 4 ] .

Referências

por 08.12.2015 / 14:10

Tags