【发布时间】:2014-07-11 17:00:12
【问题描述】:
我想使用进度查看命令pv 查看加密进度。
目前有一个 bash 脚本,它将获取文件夹名称,对其进行 tar,使用 openssl 加密, 并使用以下行将其保存到文件中:
tar cf - $1 | openssl aes-256-cbc -salt -out $1.tar.aes
它要求输入密码,确认密码并执行其操作。
我可以在 bash 脚本中使用此命令进行解密,其中 $1 是 archive.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
我设法用pv 的-W 标志阻止密码中断@ 这告诉它等待
直到它成为管道上的第一个。这样,我就可以输入密码了
但进展非常不准确。我得到了像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
【问题讨论】:
-
在这种情况下 pv 输出不准确怎么办? tar 将尽快开始将数据假脱机到管道,这意味着 pv 将在 openssl 开始读取数据之前开始看到它(特别是因为 openssl 需要密码才能对数据执行任何操作)。
-
如果您看到我的更新,除了
pv百分比偏离(完成时为 51199%,没有进度条移动)和 pv 正在弄乱终端设置之外,一切正常。 (在提示符下按 Enter 不会带您进入换行符。) -
@Rudker 您的问题是,如果没有给出单位,则该大小应以 MB 为单位。只需将
-h(人类可读)添加到du命令即可解决此问题:)
标签: bash encryption openssl