我是Linux的初学者,也是bash脚本的初学者。我正在尝试编写一个bash脚本来备份我的主目录并向我显示进度。我找到了一个名为bar的脚本,它允许我在缩小tar.bz2文件时显示进度条,但在创建一个时不显示。我找到了你的代码,我正在尝试它,但它给了我一个错误: lsof:没有指定进程ID lsof 4.81
我从这个页面转到你的代码: How to add a progress bar to a shell script? 这是代码:
#! /bin/bash tar -jcf userhomeBU$(date +%Y&m&d)".tar.bz2" /home/user lsof -o0 -o -p $PID | awk ' BEGIN { CONVFMT = "%.2f" } $4 ~ /^[0-9]+r$/ && $7 ~ /^0t/ { offset = substr($7, 3) fname = $9 "stat -f %z '\''" fname "'\''" | getline len = $0 print fname, offset / len * 100 "%" } '
我的主目录备份得很好,但由于错误我没有进度条。
看起来这将使用PID来观察它何时完成。我认为它使用PID而不是文件的名称,因为在脚本的最开始名称将是未知的。你能否解释一下这个脚本到底做了什么,以及为什么我没有得到一个PID供它观看。我已将备份代码放在前面和末尾,但它没有显示条形,我只是在不同的时间得到相同的错误。
帮助!
答案 0 :(得分:0)
以下是原始帖子中其中一个答案的改编。我测试了它,它可以在我的机器上运行:
tar -Ocf - /home/user | pv -i 1 -w 50 -berps `du -bs /home/user | awk '{print $1}'` | bzip2 - > userhomeBU$(date +%Y%m%d)".tar.bz2"
答案 1 :(得分:0)
尝试将整个tar命令分配给变量,将变量传递给pidof:
...
TAR_CMD='tar -jcf userhomeBU$(date +%Y&m&d)".tar.bz2" /home/user'
lsof -o0 -o -p `pidof -s $TAR_CMD` | \
awk ...
答案 2 :(得分:0)
这不是一个非常大的家庭目录,但我有一些大文件。备份需要大约45秒,因为有几个iso,它在VM中。此外,我知道它没有工作,因为没有创建备份文件。脚本中没有& 。当我运行它时,我得到以下输出:
[1] stopped tar -Ocf - /home/user | pv -i 1 -w 50 -berps 'du -bs /home/user | awk '{print $1}'' | bzip2 - > userBU(date +%Y%m%d)".tar.bz2"这只是我的代码的副本。每次运行时,[]中的数字增加1。代码中的第一个'和最后一个'实际上是tilda下的单个',但是`没有出现在这篇文章中。