使用`dd`剪切文件结尾部分


18

这样做可能有一个简单的技巧,但我无法从手册页中找到。

例如,如何通过使用大小不确定的文件来削减最后1MB的空间dd


1
您想要该文件的副本(最后1MB除外),还是要将最后一个MB复制到另一个文件?
2012年

我想要最后一个1MB
Zetah'2

Answers:


29

好吧,假设您拥有statbash,则可以通过以下方式获取文件大小:

stat -c %s your_file

如果要使用提取该$amount文件的最后一个字节dd,可以:

dd if=your_file of=extracted_part \
   bs=1 count=$amount \
   skip=$(( $(stat -c %s your_file) - $amount ))

但是更明智的方法是使用tail

tail -c $(( 1024*1024 )) your_file > target_file

没有-c选择head
ADTC

我认为他的意思是+ $(((1024 * 1024)):-c,--bytes = K输出最后K个字节; 或者,使用-c + K输出从每个文件的第K个字节开始的字节
Vanuan

5
dd-帮助
用法:dd [OPERAND] ...
  或:dd OPTION
复制文件,然后根据操作数进行转换和格式化。

  bs = BYTES一次读取和写入BYTES字节(另请参见ibs =,obs =)
  cbs = BYTES一次转换BYTES字节
  conv = CONVS根据逗号分隔的符号列表转换文件
  count = BLOCKS仅复制BLOCKS输入块
  ibs = BYTES一次读取BYTES字节(缺省值:512)
  if = FILE从FILE而不是stdin中读取
  iflag = FLAGS按照逗号分隔符号列表读取
  obs = BYTES一次写入BYTES字节(默认值:512)
  of = FILE写入FILE而不是stdout
  oflag = FLAGS按照逗号分隔的符号列表进行写入
  seek = BLOCKS在输出开始时跳过块大小超出块的块
  skip = BLOCKS在输入开始时跳过ibs大小的块
  status = noxfer抑制传输统计信息

BLOCKS和BYTES后面可以跟以下乘法后缀:
c = 1,w = 2,b = 512,kB = 1000,K = 1024,MB = 1000 * 1000,M = 1024 * 1024,xM = M
T,P,E,Z,Y的GB = 1000 * 1000 * 1000,G = 1024 * 1024 * 1024等。

如果文件大小恰好是10MB,则1024 * 10 10240K这将保留最后一个1024K。您应该使用ibs和obs选项指定要使用的块大小。

1M = 1024K 
1024*9 = 9216  
dd if=/10/MB/file of=/9/MB/file count=9216K ibs=1K obs=1K
dd if=/10/MB/file of=/9/MB/file count=9M ibs=1M obs=1M

您也可以跳过文件的前1MB,使用跳过选项将跳过前1MB的内容读到文件末尾。

dd if=/10/MB/file of=/9/MB/file skip=1M ibs=1M obs=1M

使用seek选项,您可以将a写入输出文件中的特定位置。假设您要保留前1MB,然后覆盖后8MB。

dd if=/10/MB/file of=/9/MB/file skip=1M seek=1M count=8M ibs=1M obs=1M

您可能需要获取有关文件大小的一些详细信息,以确保输入和输出正确数量的数据。

ls -s --block-size 1K ./my/10MB/file
人ls

       --block-size =大小
              使用SIZE个字节的块。请参阅下面的SIZE格式

       -s,-大小
              以块为单位打印每个文件的分配大小

       SIZE可以是(或可以是整数,可选地后跟)以下之一:
       降低:KB 1000,K 1024,MB 1000 * 1000,M 1024 * 1024等,对于G,T,
       P,E,Z,Y。
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.