gpt4 book ai didi

linux - Tar 备份 bash 脚本中的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:00 26 4
gpt4 key购买 nike

我有 bash 脚本用来备份/目录,我正在使用管道查看器(pv)来查看进度条。当我手动运行命令时,它工作正常,但是当我在 bash 脚本中运行相同的命令时,进度条显示它执行了 100%,最终达到 108%,尽管 ETA 在达到 100% 时显示 00:00 但它仍然继续?这是我的脚本

DIR_1="/var/root/sbin/bin/etc/lib/www/usr/mnt";

CAL_1=$(du -skc $DIR_1 | awk '{print $1}' | tail -n1);

    if [ "$1" = "fullbackup" ]                                                                            
then
echo "`date +%F\ %H:%M` backup started..">>$FLOG;
/bin/nice -n 19 tar cf - `echo $DIR_1` | pv -s ${CAL_1}k >$DESTINATION/$FILENAME -f 2>$TARLOG;
if [ $? -eq 0 ]
then
echo "`date +%F\ %H:%M` tar archive successfull" >>$FLOG ;
NEW=$(cd $DESTINATION && ls -t full* | head | sed '1!d');

elif [ $? -ne 0 ]
then
echo "`date +%F\ %H:%M` tar archive failed">>$FLOG;
rm $DESTINATION/$FILENAME;
exit;
fi

最佳答案

事情是这样的。您告诉pv tar 文件的大小是$DIR_1 下文件的总和,有时并非如此。

特别是,当您运行该程序时,您得到的是 108% 而不是 100%,这 8% 的差异是 tar 文件的开销。您可以通过将 $CAL_1 返回的值与 ls -l $DESTINATION/$FILENAME 返回的值进行比较来轻松验证这一点。 。

方式上也可能存在一些细微的差异 du -k决定 K 的含义与 pv 如何测量它。要消除这种可能性,请从 pvdu 中删除“k”。

我认为以交互方式运行这个是一个转移注意力的事情。我猜当你以交互方式运行时,你在一个小型文件系统上运行,其中 tar 开销接近 0,而当你在脚本中运行时,它是在一个大型文件系统上完成的。 (小型文件系统是一种交互方式,因为谁愿意等待几个小时才能得到结果?)。

要验证以消除交互式与脚本的情况,请确保在相同文件系统上运行两者。

如果这不起作用,我建议在您的问题中添加上面提到的特定输出,例如 $CAL_1 的值是什么以及最终 tar 文件的 ls 是什么。

关于linux - Tar 备份 bash 脚本中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31239491/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com