确保“cp”命令正确执行

确保“cp”命令正确执行

我使用本主题中描述的命令制作文件的备份副本cp(在 Linux 中复制文件,如果目标中确实存在文件,请避免复制):https://superuser.com/a/1377730/1008457 命令是:

while true; do echo n; done | cp -Ri /origin /destination 2>/dev/null

效果很好。但是我如何确保复制过程没有错误(硬盘驱动器的读/写错误)?考虑 shell 变量$?a就足够了0复制后返回就足够了吗?

答案1

cp0如果没有发生错误,将返回退出状态,否则1。所以是的,您可以在脚本中测试这个值来确定是否没有发生错误。

目前,您还可以使用 丢弃命令的标准错误2>/dev/null。如果省略此选项,任何错误都将打印到终端,这是stdout和的默认设置stderr。或者你可以捕捉stderr到日志文件,扩展名为2>path/to/log/file.


另外,(正如库萨罗南达已经评论了)您可以使用 , 来简化命令-n--no-clobber这意味着不要覆盖任何目标。

cp -Rn origin destination 2>log_file

之后,如果进入脚本,您可以测试$?是否成功。

或者您可以使用标准if语法:

if cp -Rn origin destination 2>log_file; then
    echo "OK"
else
    echo "Failed"
fi

或缩写:

cp -Rn origin destination 2>log_file && echo "OK" || echo "Failed"

另外-a(而不是-R)似乎对于备份很有用-Rd,因为它实现了取消引用链接(请参阅man cp

相关内容