中断文件之间的批处理作业

中断文件之间的批处理作业

我需要设置我的 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]

参考

相关内容