使用pv progress viewer查看tar cf pipe以打开openssl进度

时间:2014-07-11 17:00:12

标签: bash encryption openssl

我想查看使用pv加密进度的进度视图命令。

目前有一个bash脚本,它将获取文件夹名称,tar,用openssl加密, 并使用以下行将其保存到文件中:

tar cf - $1 | openssl aes-256-cbc -salt -out $1.tar.aes 

它要求输入密码,确认密码并完成其中的操作。 我可以在bash脚本中使用此命令解密,其中$1archive.tar.aes

openssl aes-256-cbc -d -salt -in $1 | tar -xf -

我想要做的是添加pv命令,指定存档大小(以便pv可以计算ETA):

pv -n -s `du -s jazz | awk '{ print $1 }'`

并查看加密进度。

我现在正在尝试的是:

tar cf - $1 | pv -n -s `du -s jazz | awk '{ print $1 }'` |  openssl aes-256-cbc -salt -out $1.tar.aes

它似乎不起作用。 会发生什么是openssl命令要求输入密码,在我输入密码之前,pv启动 吐出进展。 (虽然不准确)

这可能是我整理管道的方式。我需要对它们进行不同的分组吗? 或者我错过了一些关于管道的事情?

你能演示如何做我想在这里实现的目标吗?

任何意见或建议。 感谢。

更新1:

使用来自@damienfrancois的重组管道,pv在我之前仍然吐出东西 已输入openssl密码。这是我现在得到的输出:

enter aes-256-cbc encryption password:   0 B 0:00:01 [   0 B/s] [>                                                            ]  0% ETA 0:00:00
Verifying - enter aes-256-cbc encryption password:   0 B 0:00:02 [   0 B/s] [>                              0 B 0:00:07 [   0 B/s] [>                                                            ]  0% ETA 0:00:00

bad password read

我设法用-W pv标志来阻止密码中断。这告诉它等待 直到它在管道上获得第一个。有了这个,我可以输入密码 但进展非常不准确。我得到的是51199%

等读物
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
 335MiB 0:00:02 [ 126MiB/s] [========================================================] 51199% 

之后我得到了一个不同的问题,终端搞砸了,所以当我按下输入时 提示,它不会带我到换行符,只是在前面打印出提示 像这样的最后一个提示:

localhost:crypto-utils rudker$ localhost:crypto-utils rudker$

这可能与pv没有正确设置终端变量有关 比如如果你不在ncurses中调用endwin()会发生什么

任何想法我怎么能得到体面的进步指示我想在这里做什么? - 不要搞乱终端。

bash脚本中最新的一行是:

tar cf - $1 |  openssl aes-256-cbc -salt | pv -W -s `du -s jazz | awk '{ print $1 }'` > $1.tar.aes

1 个答案:

答案 0 :(得分:2)

您可以重新组织管道,以便在openssl

之前启动pv
tar cf - $1 |  openssl aes-256-cbc -salt | pv -n -s `du -hs jazz | awk '{ print $1 }'` > $1.tar.aes

以上允许openssl写入stdout,以便在进入磁盘之前通过pv,但在解密之后。但文件大小的准确性可能并不完美。