在 shell 脚本中复制时检查磁盘 space
check disk space while copying in shell script
我正在使用 GNU parallel 并行复制文件,如下所示,它工作正常。
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=
PRIMSEC=
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
现在我想在复制任何新文件之前检查磁盘 space。如果磁盘剩余 20% space,则仅在没有剩余 20% space 时复制,然后退出 shell 脚本并显示错误消息和非零状态代码.那么如何在每次 scp 复制后检查磁盘 space 并确保它没有达到限制?我必须检查 /abc
和 /pqr
磁盘。它们是两个不同的磁盘。
运行 在调用 scp
:
之前在复制函数中有类似的东西
df /abc /pqr | awk 'NR>1 {gsub(/%/,""); if ( > 80) {exit 1}}' || exit 1
解释(按要求):
df /abc /pgr
:获取挂载 /abc
和 /pgr
的磁盘使用情况报告
| awk
:管道到 awk
解释器,awk
脚本如下
NR>1 { ... }
:对行号 > 1 执行此块(即忽略 header 行)
gsub(/%/,"")
: 将百分号替换为空,以免破坏数值比较
if ( > 80) { ... }
:如果行的第五个字段(</code>)大于80,则执行此代码块</li>
<li><code>exit 1
:退出 awk
,return 值 1 表示错误
|| exit 1
:将awk
的退出值传播到脚本 的退出值
我正在使用 GNU parallel 并行复制文件,如下所示,它工作正常。
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=
PRIMSEC=
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
现在我想在复制任何新文件之前检查磁盘 space。如果磁盘剩余 20% space,则仅在没有剩余 20% space 时复制,然后退出 shell 脚本并显示错误消息和非零状态代码.那么如何在每次 scp 复制后检查磁盘 space 并确保它没有达到限制?我必须检查 /abc
和 /pqr
磁盘。它们是两个不同的磁盘。
运行 在调用 scp
:
df /abc /pqr | awk 'NR>1 {gsub(/%/,""); if ( > 80) {exit 1}}' || exit 1
解释(按要求):
df /abc /pgr
:获取挂载/abc
和/pgr
的磁盘使用情况报告
| awk
:管道到awk
解释器,awk
脚本如下NR>1 { ... }
:对行号 > 1 执行此块(即忽略 header 行)gsub(/%/,"")
: 将百分号替换为空,以免破坏数值比较if ( > 80) { ... }
:如果行的第五个字段(</code>)大于80,则执行此代码块</li> <li><code>exit 1
:退出awk
,return 值 1 表示错误
|| exit 1
:将awk
的退出值传播到脚本 的退出值