Files

從大文件末尾刪除空字節

  • May 5, 2022

我剛剛使用以下命令在執行 Linux 發行版的 PC 上備份了我的 Raspberry Pi 中的 microSD 卡:

dd if=/dev/sdx of=file.bin bs=16M

microSD 卡只有 3/4 滿,所以我想在這個巨大文件的末尾有幾個空字節。我很確定我不需要那個。如何有效地從末尾刪除那些空字節,以便以後可以使用此命令恢復它?

cat file.bin /dev/zero | dd of=/dev/sdx bs=16M

要在節省空間的同時創建磁碟的備份副本,請使用gzip

gzip </dev/sda >/path/to/sda.gz

如果要從備份中恢復磁碟,請使用:

gunzip -c /path/to/sda.gz >/dev/sda

與僅僅剝離尾隨 NUL 字節相比,這可能會節省更多空間。

刪除尾隨 NUL 字節

如果你真的想刪除尾隨的 NUL 字節並且你有 GNU sed,你可以嘗試:

sed '$ s/\x00*$//' /dev/sda >/path/to/sda.stripped

如果大磁碟的數據超過 sed 的某些內部限制,這可能會遇到問題。雖然 GNU sed 對數據大小沒有內置限制,但GNU sed 手冊解釋說系統記憶體限制可能會阻止處理大文件:

GNU sed 對行長沒有內置限制;只要它可以 malloc() 更多(虛擬)記憶體,您就可以隨心所欲地饋送或構造行。

但是,遞歸用於處理子模式和無限重複。這意味著可用的堆棧空間可能會限制某些模式可以處理的緩衝區的大小。

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