コンテンツに影響を与えずにファイルのバイトサイズを増やすにはどうすればよいでしょうか?

コンテンツに影響を与えずにファイルのバイトサイズを増やすにはどうすればよいでしょうか?

ファイルの内容を壊さずに、ファイルのバイト サイズを簡単かつ任意に増やす方法はありますか? たとえば、ダミー バイトを挿入する方法です。私の使用例のファイルは png タイプです。

私は OS X を使用していますが、あらゆる解決策を歓迎します。

答え1

質問に対する答えは、定義上、文字通り「いいえ」です。ファイルのサイズは、そのコンテンツの長さです。サイズを変更する場合は、コンテンツを変更する必要があります。

ただし、内容を変更して取得することは可能です同等の内容サイズが異なります。これが可能かどうかは、ファイル形式と、何を同等と見なすかによって異なります。

たとえば、ファイルがPNG画像で、表示される画像が同じであればPNG画像を含む2つのファイルを同等と見なす場合、ファイルにコメントフィールドを追加(または長く)することでファイルを大きくすることができます。たとえば、イメージマジック:

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コマンドを使用する特定のサイズに達するまで簡単にヌルバイトを追加できます。結果のファイルは広く受け入れられますが、技術的には無効であるため、どこでも受け入れられるとは限りません。(libpngまたは派生的なものであり、このライブラリは非常に普及しているため、ファイルが機能する可能性は十分にあります。

答え2

このtruncateコマンドには、null バイトを追加してファイルのサイズを増やすというあまり知られていないオプションがありますが、 のように、これらを明示的に表示するエディターを使用しない限り、コンテンツには表示されませんvim

正しい構文が説明されているマニュアルページただし、通常は、-sオプションを渡して、 のようなファイル サイズを指定するか-s 10k、 のように「+」を追加して、-s +10kその数の null バイトをファイルに追加します。

追加されたバイトは最後に挿入されます。このユースケースでは、これらの null は、通常の表示では画像に表示されません。

答え3

目的に応じて、スパースファイル。 例えば...

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

これにより、サイズが 5 メガバイトのように見えるファイルが作成されますが、ディスク領域は 0 しか占有しません。読み取られると、「余分な領域」は null として表示されます。

既存のファイルをスパースにするには、 を使用しますtruncate -s。たとえば、このアニメーション GIF は、サイズが 5 メガバイトであるように見えますが、ディスク上では 102 キロバイトしか占有しません。

$ 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

ファイルの Finder 情報には次のように書かれています...5,242,880 bytes (102 KB on disk)

これが有効かどうかは、ファイルの使用方法によって異なります。上記の例では、アニメーション GIF は Firefox でも引き続き動作します。

関連情報