8

问题:我有一个后端进程,他有时会收集并构建一个大的 tar 文件。这个 tar 接收几个目录和一个排除文件。该过程可能需要几分钟,我想在我的前端过程 (GUI) 中报告去皮过程的进度(这对于按下下载按钮的用户来说是一个大问题,似乎什么都没有发生。 ..)。

我知道我可以在 tar 命令中使用 -v -R 并计算文件和大小进度,但我正在寻找某种 tar 预运行模式/空运行来帮助我评估预期的文件数量或预期的 tar 大小.

我正在使用的命令:tar -jcf 'FILE.tgz' 'exclude_files' 'include_dirs_and_files'

每个愿意提供帮助的人都可以获得 10 倍。

4

2 回答 2

15

您可以将输出通过管道传输到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
于 2013-12-09T17:13:44.873 回答
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

于 2016-10-07T07:49:10.547 回答