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

zet*_*tah 20 dd

可能有一个简单的技巧可以做到这一点,但我无法从手册页中弄清楚。

例如,如何使用dd?

Mat*_*Mat 34

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

stat -c %s your_file
Run Code Online (Sandbox Code Playgroud)

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

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

但更明智的方法是使用tail

tail -c $(( 1024*1024 )) your_file > target_file
Run Code Online (Sandbox Code Playgroud)


nel*_*aro 5

dd --help
用法:dd [操作数]...
  或:dd 选项
复制文件,根据操作数进行转换和格式化。

  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 在输出开始时跳过 BLOCKS 个 obs 大小的块
  skip=BLOCKS 在输入开始时跳过 BLOCKS ibs 大小的块
  status=noxfer 抑制传输统计

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

如果文件大小正好是10MB, 1024*10 10240K 这会留下最后的1024K。您应该使用 ibs 和 obs 选项指定您正在使用的块大小。

1M = 1024K 
1024*9 = 9216  
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)

您还可以跳过文件的前 1MB,使用跳过选项跳过前 1MB 读取到文件的末尾。

dd if=/10/MB/file of=/9/MB/file skip=1M ibs=1M obs=1M
Run Code Online (Sandbox Code Playgroud)

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

dd if=/10/MB/file of=/9/MB/file skip=1M seek=1M count=8M ibs=1M obs=1M
Run Code Online (Sandbox Code Playgroud)

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

ls -s --block-size 1K ./my/10MB/file
Run Code Online (Sandbox Code Playgroud)
男人

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

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

       SIZE 可以是(或者可以是一个可选的整数)以下之一?
       降低:KB 1000、K 1024、MB 1000*1000、M 1024*1024 等,G、T、
       P、E、Z、Y。