Dd
從文件開頭刪除字節的最佳方法?
今天我不得不從一個 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。