手っ取り早く巨大ファイルを作る方法(小ネタ)です。
小難しいコマンドは使いません。
Windows, Linux どちらも(ほぼ)同じ方法でいけます。
(数学ネタも少しあります。)
Windows(DOS窓) の場合
まず適当なファイルを、メモ帳(notepad.exe)等で作ります。
(1バイトでも可です。)
そのファイルを、自分自身に上書き追加します。
type bigfile.txt >> bigfile.txt
これを繰り返すと、2のべき乗 でファイルサイズが増加します。
( 1, 2, 4, 8, 16, 32, ・・・ )
2019/08/30 23:50 1,024 bigfile.txt
:
2019/08/30 23:50 2,048 bigfile.txt
:
2019/08/30 23:50 4,096 bigfile.txt
数百MB程度なら、わりとすぐ作れます。
IN と OUT が同じファイルだから気になる~ という場合は、
2個のファイルで交互に上書き追加します。
type bigfile1.txt >> bigfile2.txt
type bigfile2.txt >> bigfile1.txt
これは1行にまとめられます。
type bigfile1.txt >> bigfile2.txt & type bigfile2.txt >> bigfile1.txt
この場合は、フィボナッチ数列 でファイルサイズが増加します。
( 1, 1, 2, 3, 5, 8, 13, ・・・ )
2019/08/30 23:58 8 bigfile1.txt
2019/08/30 23:58 13 bigfile2.txt
:
2019/08/30 23:58 21 bigfile1.txt
2019/08/30 23:58 34 bigfile2.txt
:
2019/08/30 23:58 55 bigfile1.txt
2019/08/30 23:58 89 bigfile2.txt
さらに2ファイルのサイズの比は、黄金比 に近づきます。
2019/08/30 23:59 121,393 bigfile1.txt
2019/08/30 23:59 196,418 bigfile2.txt
:
2019/08/30 23:59 317,811 bigfile1.txt
2019/08/30 23:59 514,229 bigfile2.txt
:
2019/08/30 23:59 832,040 bigfile1.txt
2019/08/30 23:59 1,346,269 bigfile2.txt
Linux の場合
Linux (CentOS7) では、自分自身に上書き追加が できないようです。
[xxuser@xxhost ~]$ cat bigfile.txt >> bigfile.txt
cat: bigfile.txt: 入力ファイルと出力ファイルが同じです
詳しくは書きませんが、標準コマンドで自分自身に
無理に上書き追加しようとすると、暴走する可能性があります。
(てか暴走しました )
なので Linux では、2ファイル交互方式です。
cat bigfile1.txt >> bigfile2.txt
cat bigfile2.txt >> bigfile1.txt
または1行にまとめます。
cat bigfile1.txt >> bigfile2.txt;cat bigfile2.txt >> bigfile1.txt
でも やっぱり Windows と同様、自分自身に上書き追加したい!
という方は、この記事の最後 をご覧ください。
注意点
上記コマンドを、調子に乗って連打しないでね
PC/サーバには、パーティションのサイズや、
メモリの上限があります。あと I/O wait とか。
マシンが重くならない程度に、気を付けて作ってください。
Linux で自分自身に上書き追加
Linux の章で、ファイルは自分自身に上書き追加できない、
と書きましたが、以下の方法があります。
tac bigfile.txt >> bigfile.txt
(一般的でないと思うので、ベータ版 として扱ってください。)
cat
ではなく tac
を使います。
CentOS7 で試したところ、暴走せずに1GBのファイルを作れました。
皆さまも よければ検証してください。