dd可以替代吗?


14

我还应该使用其他哪些工具来截断,查找和跳过文件。dd的命令行选项似乎不方便且很陌生,我不喜欢在缓慢但精确的搜索模式(bs=1)和快速但不灵活的模式(bs=4k或其他)之间进行选择。

是否有更现代的工具可以从一个文件(或管道,套接字或开发人员)的31337位置读取555个字节,并将它们写入到位置128205的另一个文件中(使用块512 + 43)(带或不带截断)?


2
我仍然看不出什么毛病dd。如果您不喜欢该界面,则可以始终在其周围放置一个shell脚本包装。 dd在POSIX标准中,这是一个巨大的优势。
jw013

2
主要的错误是无法搜索或跳过小数块。第二个错误的东西status=noxfer不是默认值,它是坏的并且是我需要的iflag=fullblock(在某些脚本中省略=>坏的数据)。
六。

4
1. bs=1=>整个管道运行缓慢。例如,我可能要转储从某个确切帧开始的视频文件。2.“需要一些算术” =>非常不适用于oneliner和常规的shell命令。
六。

1
PSA:dd conv=seek_bytes将使seek字节精度工作。
i336_

1
@ i336_我认为这对我们来说最安全的选择是避免使用Shell脚本并编写独立的静态链接的可执行文件。我只是四处寻找替代品,因为我不时听说在bash中可能直接存在疯狂的东西,并且想知道直接文件访问是否可能是这些疯狂的事情之一。
Trejkaz

Answers:


4

有工具ddrescue(当心,还有dd_rescue一个功能几乎相同的不同程序)。它使用更熟悉的语法,其中短划线为单破折号,长选项为双破折号。从手册页:

   -i, --input-position=<bytes>
          starting position in input file [0]

   -K, --skip-size=<bytes>
          initial size to skip on read error [64 KiB]

   -M, --retrim
          mark all failed blocks as non-trimmed

   -o, --output-position=<bytes>
          starting position in output file [ipos]

1
ddrescue - -- > Infile and outfile are the same.ddrescue /dev/stdin /dev/stdout- > Infile and outfile are the same.。故事的开局不好...
Vi。

我刚刚尝试过dd_rescue。它将发出警告,指出文件(stdin)不可搜索,但可以继续。您可以尝试一下。但是,ddrescue感觉功能更加成熟。
Marco Marco

1
@Vi .:不要开枪。ddrescue是的,管道不是可找的。如果要开始读取文件中的特定点,则需要授予其对所讨论文件的访问权限,而不是从其他程序通过管道传输的数据。还要注意,使用管道与您的最终速度愿望背道而驰,因为在管道中模拟搜索的唯一方法是读取并丢弃您不想处理的零件。在实际文件中查找效率更高。
沃伦·杨

实际上,由于该工具是为挽救损坏的数据而设计的,因此没有管道功能。当您想要灵活地查找输入文件而只想将结果传递到stdout时,这有点可惜。但是,就其预期目的而言,它很棒。
Lightness Races in Orbit 2015年

3

一个很好的选择是pv。它不仅自动计算出最有效的块大小,从本质上加快了处理速度,而且还提供了其他方面的进步。它的使用很简单:

pv < /dev/sda > sda.img

它在压缩方面也能很好地发挥作用。一键备份和压缩磁盘的快速方法如下:

pv < /dev/sdb | pigz -9 > disk.img.gz

您可以在此处了解更多信息


1
预期的主要功能是在输出和输入文件中查找,而pv(管道视图)不提供该文件,因为没有管道查找。
六。

2

dcfldd是另一种dd替代方案。它没有解决OP关于输入/输出寻求灵活性的问题,但对通过Google搜索到达此处的其他人可能有用。

它基于gnu dd,具有以下附加功能:

  • 即时哈希-dcfldd可以在传输输入数据时对其进行哈希处理,有助于确保数据完整性。
  • 状态输出-dcfldd可以根据传输的数据量以及需要多长时间来更新用户进度。
  • 软盘擦拭纸-dcfldd可用于快速擦拭磁盘,并根据需要以已知的方式擦拭磁盘。
  • 图像/擦除验证-dcfldd可以验证目标驱动器是否与指定的输入文件或模式逐位匹配。
  • 多个输出-dcfldd可以同时输出到多个文件或磁盘。
  • 拆分输出-与split命令相比,dcfldd可以将输出拆分为多个文件,并且具有更多的可配置性。
  • 管道输出和日志-dcfldd可以将其所有日志数据和输出发送到命令以及本地文件。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.