首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在shell脚本中复制时检查磁盘空间

在shell脚本中复制时检查磁盘空间
EN

Stack Overflow用户
提问于 2016-10-07 20:34:34
回答 1查看 1.3K关注 0票数 1

我正在使用GNU并行复制文件,如下所示,它运行良好。

代码语言:javascript
复制
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磁盘。它们是两个不同的磁盘。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-07 21:40:35

在调用scp之前,在复制函数中运行类似的内容

代码语言:javascript
复制
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的退出值传播到脚本的退出值
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39925394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档