Прерывание пакетного задания между файлами

Прерывание пакетного задания между файлами

Мне нужно настроить пакетное задание bash (сжатие файлов размером 5,1 тыс. на месте) так, чтобы в случае необходимости остановки/возобновления задания оно подождало, пока не окажется «между» файлами (только что завершит один и не начнет другой).

Мое сжатие выглядело бы так, pigz -9 -- rsnc*если бы все выполнялось одновременно, и я размышлял о чем-то вроде:

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

Надежный ли это способ достижения моей цели? Есть ли лучший способ?

решение1

Ты можешь trap [1],[2] сигнал Ctrl+ C, INT и waitдля завершения каждого процесса.

#!/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

Примечание
Существует много способов просмотреть все файлы в каталоге [3] , но это всегдалучше избегать анализа выходных данныхls [4] .

Рекомендации

Связанный контент