问题: 我有一个后端进程,在某些时候他收集并构建一个大的tar文件。 此tar接收几个目录和一个排除文件。 这个过程可能需要几分钟时间,我想在我的前端程序(GUI)中报告皮重过程的进度(这对于按下下载按钮的用户来说是个大问题,似乎没有任何事情发生。 ..)。
我知道我可以在tar命令中使用-v -R并计算文件和大小进度但是我正在寻找某种tar预运行模式/干运行来帮助我评估预期的文件数量或者预期的焦油大小。
我正在使用的命令:tar -jcf 'FILE.tgz' 'exclude_files' 'include_dirs_and_files'
答案 0 :(得分:11)
您可以将输出传输到wc
工具,而不是实际制作文件。
使用文件列表(详细):
[git@server]$ tar czvf - ./test-dir | wc -c
./test-dir/
./test-dir/test.pdf
./test-dir/test2.pdf
2734080
不
[git@server]$ tar czf - ./test-dir | wc -c
2734080
答案 1 :(得分:1)
为什么不运行
DIRS=("./test-dir" "./other-dir-to-test")
find ${DIRS[@]} -type f | wc -l
预先。这会获得每行一个文件(-type f
)并计算文件数。 DIRS是bash中的数组,因此您可以将文件夹存储在变量
如果您想知道所有存储文件的大小,可以使用du
DIRS=("./test-dir" "./other-dir-to-test")
du -c -d 0 ${DIRS[@]} | tail -1 | awk -F ' ' '{print $1}'
这将使用du
打印磁盘使用情况,计算总计(-c
标志),获取最后一行(示例4378921 total
),并仅使用第一列awk
1}}