我正在使用GNU并行复制文件,如下所示,它运行良好。
export COPY_PRI=/abc/pri
export COPY_SEC=/pqr/sec
export status_dir=$(mktemp -t -d transfer.XXXXXX)
cleanup() { rm -rf "$status_dir"; }
trap cleanup 0
copy() {
el=$1
PRIMSEC=$2
scp bullseye@"$MACHINE_ONE":"$dir3"/process_"$el"_210_5.data "$PRIMSEC"/. || { touch "$status_dir/local_down" && scp bullseye@"$MACHINE_TWO":"$dir3"/process_"$el"_210_5.data "$PRIMSEC"/.; } || { touch "$status_dir/pri_down" && scp bullseye@"$MACHINE_THREE":"$dir3"/process_"$el"_210_5.data "$PRIMSEC"/.; } || { touch "$status_dir/sec_down" && exit 1; }
}
export -f copy
parallel -j 3 copy {} $COPY_PRI ::: "${PRI_FILES[@]}" &
parallel -j 3 copy {} $COPY_SEC ::: "${SEC_FILES[@]}" &
wait现在,我想在复制任何新文件之前检查磁盘空间。如果磁盘仍然有20%的空间,那么只有当它没有剩下20%的空间时,才复制,然后退出shell脚本,带有错误消息和非零状态代码。那么,如何在每个scp副本之后检查磁盘空间并确保它没有达到极限呢?我必须检查/abc和/pqr磁盘。它们是两个不同的磁盘。
发布于 2016-10-07 21:40:35
在调用scp之前,在复制函数中运行类似的内容
df /abc /pqr | awk 'NR>1 {gsub(/%/,""); if ($5 > 80) {exit 1}}' || exit 1解释(应要求):
df /abc /pgr:获取挂载/abc和/pgr的磁盘使用情况报告| awk:管道到awk解释器,awk脚本遵循NR>1 { ... }:对行号>1执行此块(即忽略标题行)gsub(/%/,""):将百分比符号替换为零,这样它就不会破坏数字比较if ($5 > 80) { ... }:如果行上的第五个字段($5)大于80,请执行以下代码块exit 1:返回值为1的awk退出为信号错误
|| exit 1:将awk的退出值传播到脚本的退出值https://stackoverflow.com/questions/39925394
复制相似问题