Windowsでそのようなことをする方法を見つけました
echo "This is just a sample line appended to create a big file. " > dummy.txt
for /L %i in (1,1,21) do type dummy.txt >> dummy.txt
http://www.windows-commandline.com/how-to-create-large-dummy-file/
UNIXでファイルをコピーし、追加してからプロセスを繰り返す方法はありますか?何かのようなもの for .. cat file1.txt > file1.txt
?
yes "Some text" | head -n 100000 > large-file
csh
/tcsh
の場合:
repeat 10000 echo some test > large-file
zsh
の場合:
{repeat 10000 echo some test} > large-file
GNUシステムでは、以下も参照してください:
seq 100000 > large-file
または:
truncate -s 10T large-file
(10TiBスパースファイルを作成します(非常に大きいが、ディスク上のスペースを取りません))および "ゼロバイトの多いテストファイルの作成" で説明されている他の代替方法。
やっているcat file >> file
は悪い考えです。
まず、出力ファイルと同じファイルの読み取りを拒否する一部のcat
実装では機能しません。しかし、あなたがcat file | cat >> file
、file
がcat
の内部バッファより大きい場合、以前に書き込んだデータを読み取ってしまうため、cat
が無限ループで実行されます。 。
回転式ハードドライブによってバックアップされたファイルシステムでは、ドライブがデータを読み取る場所の間を行き来する必要があるため、(メモリにキャッシュされる可能性があるサイズよりも大きいサイズに達した後)もかなり非効率的です。そしてそれをどこに書くか。
Solarisでは、次のコマンドを使用して大きなファイルを作成できます。
mkfile 10g /path/to/file
Solaris(およびLinux)で動作する別の方法:
truncate -s 10g /path/to file
以下を使用することもできます。
dd if=/dev/zero of=/path/to/file bs=1048576 count=10240
Linuxシステムで大きなファイルを作成する最も速い方法はfallocate
です。
Sudo fallocate -l 2G bigfile
fallocate
は、ファイルシステムを操作し、デフォルトでは実際にはデータセクターに書き込みを行わないため、非常に高速です。欠点は、ルートとして実行する必要があることです。
ループで連続して実行すると、最大のファイルシステムをほんの数秒で満たすことができます。
man fallocate
から
fallocateは、ファイルに割り当てられたディスク領域を操作して、割り当てを解除するか、事前に割り当てます。
fallocateシステムコールをサポートするファイルシステムの場合、ブロックを割り当て、初期化されていないものとしてマークすることにより、事前割り当てが迅速に行われ、データブロックにIOを必要としません。ファイルをゼロで埋めます。
XFS(Linux 2.6.38以降)、ext4(Linux 3.0以降)、Btrfs(Linux 3.7以降)およびtmpfs(Linux 3.5以降)でサポートされます。
これはCTRL-Cになるまで続きます:
yes This is stuff that I want to put into my file... >> dummy.txt
ただし、数十万行/秒になる可能性があるので注意してください...
man yes
:
yes - output a string repeatedly until killed
私があなたを正しく理解しているなら、あなたは次のようなものを探しています:
echo "test line" > file;
for i in {1..21}; do echo "test line" >> file; done
これにより、「テスト行」が22回繰り返されたファイルが作成されます。特定のファイルサイズが必要な場合は、このようなものを使用できます(Linuxの場合)。 1024は1キロバイトです。
while [ $(stat -c "%s" file) -le 1024 ]; do echo "test line" >> file; done
個人的には、大きなファイルを作成したい場合、2つのファイルを使用し、一方を他方に猫します。目的のサイズ(ここでは1 MB)に達するまで、このプロセスを繰り返すことができます。
echo "test line" > file;
while [ $(stat -c "%s" file) -le 1048576 ]; do
cat file >> newfile
cat newfile >> file
done
ファイルが制限を下回っている場合、すべてが再びその中に含まれるため、このソリューションは多くの場合、望ましいサイズを超えます。
最後に、必要なのが目的のサイズのファイルであり、実際に何かを含める必要がない場合は、truncate
を使用できます。
truncate -s 1M file
/dev/urandom
の内容をhead
にパイプすることで、出力をファイルにリダイレクトできるため、次のようになります。
cat /dev/urandom | head --bytes=100 >> foo.bar
100バイトのゴミが含まれるファイルを取得します。
echo "This is just a sample line appended to create a big file. " > dummy.txt
i=1
while [ $i -le 21 ]
do
cat dummy.txt >> bigfile
cat bigfile > dummy.txt
(( i++ ))
done
windowsスクリプトと同じ効果ですが、bashでは、ファイルをそれ自体に直接連結することはできません。