如何使用pv显示openssl加密/解密的进度?

如何使用pv显示openssl加密/解密的进度?

我需要加密并能够使用 解密文件openssl,目前我只需使用以下命令即可完成此操作:

openssl enc -aes-256-cbc -salt -in "$input_filename" -out "$output_filename"

和解密:

openssl enc -aes-256-cbc -d -salt -in "$input_filename" -out "$output_filename"

但对于大文件,我希望看到进展。

我尝试了以下不同的变体(解密):

pv "$input_filename" | openssl enc -aes-256-cbc -d -salt | pv > "$output_filename"

但这无法要求我输入密码。我不确定该怎么做?

编辑1:

我发现了tar这个openssl

https://stackoverflow.com/a/24704457/1997354

虽然它可能非常有帮助,但我不太明白。

编辑2:

关于命名管道:

几乎可以用了。除了眨眼进度,我无法明显地向您展示,最终结果如下所示:

enter aes-256-cbc decryption password:
1.25GiB 0:00:16 [75.9MiB/s] [==============================================================================================================================================================================================>] 100%            
1.25GiB 0:00:10 [ 126MiB/s] [                                             <=>                                                                                                                                                                ]

答案1

你应该试试

openssl enc -aes-256-cbc -d -salt -in "$input_filename" | pv -W >> "$output_filename"

手册:

-W,--等待:

等待第一个字节传输完毕,然后再显示任何进度信息或计算任何 ETA。如果您通过管道传输的程序在启动之前需要额外信息,例如将数据传输到 gpg(1) 或 mcrypt(1) 中,这在处理数据之前需要密码短语,则非常有用。

这正是你的情况。如果您需要查看进度条,原因由周伟军在下面的评论中,您可以反转管道中命令的顺序:

pv -W "$input_filename" | openssl enc -aes-256-cbc -d -salt -out "$output_filename"

答案2

你需要命名管道这里。

$ mkfifo mypipe
$ pv < mypipe > "$output_filename"|(pv "$input_filename" | openssl enc -aes-256-cbc -d -salt -out mypipe)

这两个命令的输出pv将交替显示在 tty 窗口的底部。但不确定这是否是您真正需要的。如果您只需要pvin的输出pv "$input_filename",请相应修改上述命令。

编辑

从OP获得更多信息后,我现在确信

pv "$input_filename" | openssl enc -aes-256-cbc -d -salt -out "$output_filename"

足以解决OP的问题真实的需要。

相关内容