Dd

使用dd剪切文件結束部分

  • February 27, 2014

可能有一個簡單的技巧可以做到這一點,但我無法從手冊頁中找到。

如何從大小未定的文件中剪切最後 1MB,例如,使用dd?

好吧,假設你有statand bash,你可以得到文件大小:

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
dd --幫助
用法: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 而不是標準輸出
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  
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
男人

--塊大小=大小
使用 SIZE 字節塊。請參閱下面的 SIZE 格式

-s,--尺寸
列印每個文件的分配大小,以塊為單位

SIZE 可以是(或可以是一個可選地後跟的整數)以下之一
降低:對於 G、T,KB 1000、K 1024、MB 1000*1000、M 1024*1024 等等,
P、E、Z、Y。

引用自:https://unix.stackexchange.com/questions/32941