bash 输出使用 dd /dev/zero 和对话框 --gauge 创建文件

bash 输出使用 dd /dev/zero 和对话框 --gauge 创建文件

我正在尝试使用以下命令创建一个新文件(空白文件):

dd if=/dev/zero of=file.txt count=10240 bs=10240

我还想使用对话框输出 --gauge,如下所示:

dd if=/dev/zero | pv | dd of=output.dat count=10240 bs=102400 iflag=fullblock | dialog --gauge "testing" 10 70 0

我也尝试过以下变体:

(pv -n /dev/zero | dd if=/dev/zero of=output.dat  bs=1000M  count=1) | dialog --guage "Creating a file..." 10 70 0

然而它不起作用,只是让我知道文件何时完成。

谢谢。

答案1

我建议您跳过dialog并使用“普通”pv像这样在命令行中查看进度

# dd if=/dev/zero bs=10240 count=102400| bash -c 'pv -s 1g  > /media/sudodus/usbdata/output.dat'
 320MiB 0:00:07 [39,2MiB/s] [=========>                        ] 31% ETA 0:00:15
...
1000MiB 0:00:34 [29,1MiB/s] [===============================>  ] 97%            
102400+0 records in
102400+0 records out
1048576000 bytes (1,0 GB, 1000 MiB) copied, 34,4327 s, 30,5 MB/s

我写入 USB 闪存盘是为了让速度变慢并且更容易“查看”。

答案2

由于我自己一直在尝试这样做,因此这里有一个解决方案。

pv写入 stderr,因此您需要将输出重定向到 stdout。

我想将零写入加密分区。所以:

#dd if=/dev/zero of=/dev/mapper/swap_crypt bs=1M
    dd: error al escribir en '/dev/mapper/swap_crypt': No queda espacio en el dispositivo
    4269+0 registros leídos
    4268+0 registros escritos
    4475322368 bytes (4,5 GB, 4,2 GiB) copied, 4,1489 s, 1,1 GB/s

由于我不需要输出,所以我告诉dd不要打印除错误之外的任何内容status=none

# dd if=/dev/zero of=/dev/mapper/swap_crypt bs=1M status=none
# 

不错,没有输出!所以现在我使用 pv 来监视进度,因为我也知道写入了多少字节,您可以告诉 pv 根据传输的字节打印百分比:-n写入要传输的百分比和-s字节:

# dd if=/dev/zero | pv -n -s 4475322368 | dd of=/dev/mapper/swap_crypt bs=1M  status=none
16
32
43
52
61
69
77
84
88
dd: error al escribir en '/dev/mapper/swap_crypt': No queda espacio en el dispositivo
100
# 

现在我们将 stderr 重定向到 stdout 并将管道重定向到dialog --gauge

#(dd if=/dev/zero | pv -n -s 4475322368 | dd of=/dev/mapper/swap_crypt bs=1M  status=none) 2>&1 | dialog --title "Status"  --gauge "Writing zeros..." 10 60 0 

现在您只需要在传输之前计算出(简单的任务)它将占用多少字节并替换 pv 的 -s 参数中的数字。

答案3

有点偏离主题,但你可以使用status=progress操作数 in dd,你会得到类似这样的结果:

748901888 bytes (749 MB, 714 MiB) copied, 3 s, 250 MB/s

相关内容