如何在不影響內容的情況下增加文件的位元組大小?

如何在不影響內容的情況下增加文件的位元組大小?

有沒有一種方法可以輕鬆且任意地增加檔案的位元組大小而不損壞其內容?例如,透過插入虛擬位元組。我的用例的文件類型為 png。

我使用的是 OS X,但歡迎所有解決方案。

答案1

根據定義,你的問題的字面答案是否定的。文件的大小是其內容的長度。如果要變更大小,則需要變更內容。

但是,可以更改內容並獲得同等內容具有不同的尺寸。這是否可行取決於文件​​格式以及您認為等效的格式。

例如,如果檔案是 PNG 影像,而您認為兩個包含 PNG 影像的檔案在顯示的影像相同的情況下是等效的,則可以透過在檔案中新增(或加長)註解欄位來增大檔案。例如與圖像魔術師:

convert old.png -comment 'This comment will be added to the image file, making it larger' new.png

最大可移植註解大小為2GB(您最多可以升級到 4GB)。原則上你可以添加多個註解(或使用其他欄位名稱),但我不知道常見的程式是否支援這一點。

繼續以 PNG 圖像為例,許多程式接受包含有效 PNG 圖像和額外內容的文件,就好像它只是沒有此額外內容的 PNG 圖像一樣。如果您附加尾隨垃圾,許多程式仍然會接受圖像:

cp old.png new.png
echo 'trailing garbage' >>new.png

你可以使用truncate命令輕鬆附加空字節以達到一定的大小。請記住,生成的文件已被廣泛接受,但從技術上講它是無效的,因此可能不會在所有地方都被接受。 (它似乎適用於每個使用庫檔案或衍生版本,並且該庫非常普遍,因此您很有可能該文件將起作用。

答案2

truncate命令有一個鮮為人知的選項,可以通過添加空字節來增加文件的大小,除非您使用明確顯示這些字節的編輯器,否則空字節在內容中不可見,例如vim.

解釋了正確的語法在手冊頁中,但通常情況下,傳遞該-s選項並給出您希望文件的大小-s 10k,或者添加一個“+”以-s +10k向文件中添加許多空字節。

新增的位元組將插入到末尾。對於您的用例,正常查看時,這些空值在圖像中將不可見。

答案3

根據您的目的,您可以建立一個稀疏文件。例如...

dd of=sparse bs=5M seek=1 count=0

這將建立一個大小看起來為 5 MB 的文件,但佔用 0 磁碟空間。讀取時,「額外空格」將顯示為空。

您可以使用 使現有文件變得稀疏truncate -s。例如,我讓這個動畫 GIF 看起來大小為 5 MB,但在磁碟上僅佔用 102 KB。

$ ls -l pikachu-nyan.gif 
-rw-r--r-- 1 schwern staff 100872 Oct 29  2019 pikachu-nyan.gif

$ truncate -s 5M pikachu-nyan.gif 

$ ls -l pikachu-nyan.gif 
-rw-r--r-- 1 schwern staff 5242880 Jan  9 14:32 pikachu-nyan.gif

該文件的查找器資訊顯示...5,242,880 bytes (102 KB on disk)

這是否有效取決於您如何使用該文件。在上面的範例中,動畫 GIF 繼續在 Firefox 中運行。

相關內容