当前位置:   article > 正文

linux tar进度条,有没有办法查看每个文件的tar进度?

ubuntu tar 命令自带9进度显示吗

刚刚注意到了有关MacOS的评论,虽然我认为@akira(和pv)的解决方案更加整洁,但我想我会在我的MacOS盒中使用tar并向其发送SIGINFO信号来寻找预感和快速解决方法。有趣的是,它可以工作:)如果您使用的是类似BSD的系统,则应该可以,但是在Linux机器上,您可能需要发送SIGUSR1,并且/或者tar可能无法以相同的方式工作。

不利的一面是,它将仅向您提供一个输出(在stdout上),该输出向您显示该文件在当前文件中的距离,因为我猜测它不知道它所获取的数据流的大小。

因此,是的,另一种方法是启动tar,并在您想知道它走多远时定期发送SIGINFO。这个怎么做?

临时的手动方法

如果您希望能够临时检查状态,则可以control-T在相关窗口中单击(如Brian Swift所述),该窗口将发送SIGINFO信号。我认为,与此相关的一个问题是它将其发送到您的整个链中,因此,如果您这样做:

% tar cvf - folder-with-big-files | bzip2 -c > big-files.tar.bz2

您还将看到bzip2和tar一起报告其状态:

a folder-with-big-files/big-file.imgload 0.79 cmd: bzip2 13325 running

14 0.27u 1.02s

adding folder-with-big-files/big-file.imgload (17760256 / 32311520)

如果您只想检查tar您的跑步机是否卡住,或者速度很慢,则此方法效果很好。在这种情况下,您可能不必太担心格式问题,因为这只是快速检查。

那种自动化的方法

如果您知道这将需要一段时间,但是想要一个进度指示器之类的方法,则可以启动tar进程,然后在另一个终端中计算出它的PID,然后将其放入脚本中,该脚本反复发送信号。例如,如果您具有以下脚本(并像说那样调用它script.sh PID-to-signal interval-to-signal-at):

#!/bin/sh

PID=$1

INTERVAL=$2

SIGNAL=29 # excuse the voodoo, bash gets the translation of SIGINFO,

# sh won't..

kill -0 $PID # invoke a quick check to see if the PID is present AND that

# you can access it..

echo "this process is $$, sending signal $SIGNAL to $PID every $INTERVAL s"

while [ $? -eq 0 ]; do

sleep $INTERVAL;

kill -$SIGNAL $PID; # The kill signalling must be the last statement

# or else the $? conditional test won't work

done

echo "PID $PID no longer accessible, tar finished?"

如果以这种方式调用它,则由于仅定位,因此tar您将获得类似以下的输出

a folder-with-big-files/tinyfile.1

a folder-with-big-files/tinyfile.2

a folder-with-big-files/tinyfile.3

a folder-with-big-files/bigfile.1

adding folder-with-big-files/bigfile.1 (124612 / 94377241)

adding folder-with-big-files/bigfile.1 (723612 / 94377241)

...

我承认,这很漂亮。

最后但并非最不重要的一点-我的脚本有点生锈,因此,如果有人想进入并清理/修复/改进代码,请毕生:)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/334994
推荐阅读
相关标签
  

闽ICP备14008679号