我使用本主题中描述的命令制作文件的备份副本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
cp
0
如果没有发生错误,将返回退出状态,否则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
)