中斷檔案之間的批次作業

中斷檔案之間的批次作業

我需要設定我的bash 批次作業(就地壓縮5.1k 個檔案),這樣如果我需要停止/恢復作業,它將等到它位於「檔案之間」(剛剛完成一個檔案並且尚未啟動另一個檔案) 。

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]

參考

相關內容