Dd

從文件開頭刪除字節的最佳方法?

  • March 8, 2021

今天我不得不從一個 800MB 混合文本/二進製文件中刪除前 1131 個字節,這是一個過濾的顛覆轉儲,我正在為一個新的儲存庫進行黑客攻擊。最好的方法是什麼?

首先我嘗試過

dd bs=1 skip=1131 if=filtered.dump of=trimmed.dump

但是在跳過之後,這一次復製文件的其餘部分一個字節,即非常慢。最後我發現我需要 405 個字節來將其四捨五入為三個 512 塊,我可以跳過

dd if=/dev/zero of=405zeros bs=1 count=405
cat 405zeros filtered.dump | dd bs=512 skip=3 of=trimmed.dump

哪個完成得相當快,但一定有更簡單/更好的方法?還有其他我忘記的工具嗎?

您可以切換 bs 和跳過選項:

dd bs=1131 skip=1 if=filtered.dump of=trimmed.dump

這樣操作可以從更大的塊中受益。

否則,您可以嘗試使用 tail (儘管將其與二進製文件一起使用並不安全):

tail -c +1132 filtered.dump >trimmed.dump

最後,您可以使用 3 個 dd 實例來編寫如下內容:

dd if=filtered.dump bs=512k | { dd bs=1131 count=1 of=/dev/null; dd bs=512k of=trimmed.dump; }

其中第一個 dd 列印其標準輸出 filters.dump;第二個只讀取 1131 個字節並將它們丟棄;然後,最後一個從其標準輸入中讀取filtered.dump 的剩餘字節並將它們寫入trimmed.dump。

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