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

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

我有几个大文件需要压缩。例如,我可以使用

tar cvfj big-files.tar.bz2 folder-with-big-files

问题是我看不到任何进度,所以我不知道需要多长时间或诸如此类的事情。使用时v我至少可以看到每个文件何时完成,但当文件很少且很大时,这不是最有帮助的。

有没有办法让 tar 显示更详细的进度?比如完成百分比、进度条或估计剩余时间等。可以针对每个文件或所有文件,也可以同时针对两者。

答案1

我更喜欢这样的一句话:

tar cf - /folder-with-big-files -P | pv -s $(du -sb /folder-with-big-files | awk '{print $1}') | gzip > big-files.tar.gz

它将有如下输出:

4.69GB 0:04:50 [16.3MB/s] [==========================>        ] 78% ETA 0:01:21

对于OSX(摘自 Kenji 的回答)

tar cf - /folder-with-big-files -P | pv -s $(($(du -sk /folder-with-big-files | awk '{print $1}') * 1024)) | gzip > big-files.tar.gz

解释

  • tartarball 工具
  • cf创建文件
  • -使用 stdout 而不是文件(以便能够将输出传送到下一个命令)
  • /folder-with-big-files要压缩的输入文件夹
  • -P使用绝对路径(不是必需的,见注释)

管道至

  • pv进度监控工具
  • -s使用以下大小作为要传输的总数据大小(用于百分比计算)
    • $(...)计算表达式
    • du -sb /folder-with-big-files磁盘使用情况以字节为单位汇总在一行中。返回例如8367213097 folder-with-big-files
    • 管道(|)awk '{print $1}'仅返回输出的第一部分du(字节,删除文件夹名称)

管道至

  • gzipgzip 压缩工具
  • big-files.tar.gz输出文件名

答案2

使用pv。要正确报告进度,pv需要知道您向其投入了多少字节。因此,第一步是计算大小(以千字节为单位)。您也可以完全删除进度条,只让它pv告诉您已看到多少字节;它会报告“完成了这么多,这么快”。

% SIZE=`du -sk folder-with-big-files | cut -f 1`

进而:

% tar cvf - folder-with-big-files | pv -p -s ${SIZE}k | \ 
     bzip2 -c > big-files.tar.bz2

答案3

更好的进度条..

apt-get install pv dialog

(pv -n file.tgz | tar xzf - -C target_directory ) \
2>&1 | dialog --gauge "Extracting file..." 6 50

在此处输入图片描述

答案4

灵感来自帮手的回答

另一种方法是使用本机tar选项

FROMSIZE=`du -sk --apparent-size ${FROMPATH} | cut -f 1`;
CHECKPOINT=`echo ${FROMSIZE}/50 | bc`;
echo "Estimated: [==================================================]";
echo -n "Progess:   [";
tar -c --record-size=1K --checkpoint="${CHECKPOINT}" --checkpoint-action="ttyout=>" -f - "${FROMPATH}" | bzip2 > "${TOFILE}";
echo "]"

结果就像

Estimated: [==================================================]
Progess:   [>>>>>>>>>>>>>>>>>>>>>>>

一个完整的例子这里

相关内容