Bash tar检查点与输入不匹配

Bash tar检查点与输入不匹配,bash,tar,Bash,Tar,考虑以下命令 tar acf file.tar.gz file-5.16 --checkpoint=1 --blocking-factor=50 \ --checkpoint-action='ttyout=%u\r' 这是输入文件夹的大小 $ du -bs file-5.16 2520025 file-5.16 现在,通过这个命令,每个记录都会传递一个检查点,并且 案例是 50*512字节=25600字节。因此 2520025/25600≈ 98个检查点。那为什么我会变得 109 作为

考虑以下命令

tar acf file.tar.gz file-5.16 --checkpoint=1 --blocking-factor=50 \
  --checkpoint-action='ttyout=%u\r'
这是输入文件夹的大小

$ du -bs file-5.16
2520025 file-5.16
现在,通过这个命令,每个记录都会传递一个检查点,并且 案例是
50*512字节=25600字节
。因此
2520025/25600≈ 98个检查点
。那为什么我会变得

109

作为输出?

开始时,您不能只获取文件夹中的总字节数并将其除以。你 必须处理单个文件。对于您需要的每个文件

ceil(bytes / 512) + 1 = blocks
加号是因为每个文件都有一个额外的块

在文件的末尾有一个包含所有零的块

然后为所有文件添加块并除以块系数, 在这种情况下,50

ceil(blocks / 50) = records
一些演示代码

$ find file-5.16 -type f |
    xargs du -B512 --apparent-size |
    perl -MPOSIX -ane '$bk += $F[0]+1; END {print ceil $bk/50}'
109