首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tar备份bash脚本中的奇怪行为

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

Stack Overflow用户
提问于 2015-07-06 14:58:56
回答 1查看 81关注 0票数 0

我有一个用于备份/目录的bash脚本,我正在使用管道查看器(Pv)查看进度条.When我手动运行该命令,它工作正常,但当我在bash脚本进度条中运行相同的命令时,它显示100%退出,并以108%结束,虽然ETA显示00:00时达到100%,但它仍然在运行??这是我的脚本

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

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

代码语言:javascript
复制
    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                                                              
EN

回答 1

Stack Overflow用户

发布于 2015-07-07 07:59:09

下面是正在发生的事情。您告诉pv tar文件的大小是$DIR_1下所有文件的总和,有时并非如此。

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

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

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31239491

复制
相关文章

相似问题

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