ファイル間のバッチジョブを中断する

ファイル間のバッチジョブを中断する

bash バッチ ジョブ (5.1k ファイルをインプレースで圧縮) を設定して、ジョブを停止または再開する必要がある場合に、ジョブがファイル間 (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]

参考文献

関連情報