【问题标题】:View tar cf pipe to openssl progress with pv progress viewer使用 pv 进度查看器查看 tar cf 管道到 openssl 进度
【发布时间】:2014-07-11 17:00:12
【问题描述】:

我想使用进度查看命令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

我设法用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


【解决方案1】:

您可以重新组织管道,使opensslpv 之前开始:

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

上面的内容让openssl 写入标准输出,以便它在进入磁盘之前通过 pv,但在被解密之后。但文件大小的准确性可能并不完美。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多