特定のサイズ(例:14 MB)でファイルを作成するにはどうすればよいですか(例:touch
コマンドまたは他の類似の方法を使用)。
ユースケースは、さまざまなファイルサイズでFTPをテストすることです。特定のサイズのファイルを作成できる場合は、FTP転送などを確認すると便利です。
truncate
を使用してください。
truncate -s 14M filename
man truncate
から:
DESCRIPTION
Shrink or extend the size of each FILE to the specified size
[...]
-s, --size=SIZE
set or adjust the file size by SIZE
注意:truncate
はあなたのシステムでは利用できないかもしれません。 Mac OS Xでは、デフォルトではインストールされません(ただし、たとえばmacportsを使って簡単にインストールできます)。このような場合は、代わりにdd
またはhead
を使用する必要があります。
編集:最も簡単な方法はおそらくAshutosh Vishwa Bandhuの 答え のtruncate
ですが、 @ offby1 によって指摘されるように sparseを作成します。あなたが望むものではないかもしれないファイル 。以下の解決策は通常のフルファイルを作成します。
次のコマンドは、foo
という名前の14MBファイルを作成します。
fallocate
(コメントで提案し、Ahmed Masudの 回答 に投票してくれた @ Breakthrough に感謝)
fallocate -l 14000000 foo
このコマンドは、ファイルサイズに関係なくtruncate
(瞬時)と同じくらい速く(大きなファイルでは遅くなる他のソリューションとは異なり)、スパースファイルではなく通常ファイルを作成するので、特に印象的です。
$ truncate -s 14MB foo1.txt
$ fallocate -l 14000000 foo2.txt
$ ls -ls foo?.txt
0 -rw-r--r-- 1 terdon terdon 14000000 Jun 21 03:54 foo1.txt
13672 -rw-r--r-- 1 terdon terdon 14000000 Jun 21 03:55 foo2.txt
ランダムデータでいっぱいになったファイルを作成する
dd if=/dev/urandom of=foo bs=14MB count=1
または
head -c 14MB /dev/urandom > foo
\0
sで埋められたファイルを作成します。
dd if=/dev/zero of=foo.txt bs=14MB count=1
または
head -c 14MB /dev/zero > foo
別のファイルの最初の14MBのデータで埋められたファイルを作成します。
head -c 14MB bar.txt > foo
別のファイルの最後の14MBのデータでいっぱいになったファイルを作成します。
tail -c 14MB bar.txt > foo
上記のすべての例で、14*1000*1000
が必要な場合、ファイルは14*1024*1024
になります。MB
をM
に置き換えます。例えば:
dd if=/dev/urandom of=foo bs=14M count=1
head -c 14M /dev/zero > foo
fallocate
はバイトでしか扱えないので、あなたはしなければならないでしょう(14 * 1024 * 1024 = 14680064)
fallocate -l 14680064 foo
dd bs=1MB count=14 if=/dev/zero of=<yourfilename>
WARNINGdd
は黙って何かを上書きしますあなたがそれを指定するなら、あなたは書く権利を持っています喜んでまたは偶然に。 dd
を理解していることを確認してください。 dd --help
を読むことで、そしてあなたはあなたのddコマンドラインを台無しにしないか、さもなければあなたは簡単に不可逆的なデータ損失を起こすことができます - さらには。
はじめに、if=
は入力ファイル、of=
は出力ファイルです。 コマンドを実行する前に、正しいことを必ず再確認してください。 :)
マジックを使うdd
;) マニュアルページ
$ dd if=/dev/zero of=output.dat bs=1024 count=14336
14MB * 1024 = 14336KB、または
$ dd if=/dev/zero of=output.dat bs=1MB count=14
そして、0で埋められた14mbのoutput.datファイルを入手するでしょう。D
これが最速の方法です。
SEEK=$SIZE-1
dd if=/dev/zero of=outfile bs=1 seek=$SEEK count=1
さもなければちょうど正確な位置へのシークをしてシングルバイトを書く迅速で汚いCまたはPerlプログラムを書く。これは、実際にブロックにデータをダンプするよりも速いLOTです。
疎なファイルを避けたい場合は、Linux(そしておそらく他のシステム)ではfallocate -l <length>
からutil-linux
を使用できます。
それが利用できない、そしてあなたがPOSIX準拠のシステムを持っているなら、あなたはposix_fallocate()ライブラリ呼び出しを使って速くて汚いプログラムを書くことができます。 posix_fallocateは指定された範囲の割り当てを保証するので、それが正常に戻った場合に範囲のその後の使用時にディスクがいっぱいになることはありません。
dd
はそのための移植性の高い方法ですが、コマンド mkfile
および xfs_mkfile
は、特にこの目的のために書かれています。速いです:
mkfile size[b|k|m|g] filename
xfs_mkfile size[b|k|m|g] filename
キャッチはどちらのコマンドも普遍的に利用可能ではないので、それらは移植可能なスクリプトを書くのには良くありません。しかし、コマンドラインから対話的に実行しているのであれば、それらが私が使用しているコマンドです。
デフォルトでは、それらはゼロで埋められたファイルを作成し、 sparse(または "holey")ファイルではありません 。どちらも-n
オプションを使ってスパースファイルを作成します。
Perlには別の選択肢があります。
Perl -e 'print "a" x 1024' > file.txt
1KBのファイルが作成されます。 1024を好きな番号に置き換えます。