コマンドラインから特定のサイズのファイルを作成するにはどうすればよいですか?


125

touch特定のサイズ(14 MBなど)でファイルを作成するには(たとえば、コマンドまたは他の同様の方法を使用して)。

ユースケースは、さまざまなファイルサイズでFTPをテストすることです。特定のサイズのファイルを作成できる場合は、FTP転送などを確認すると便利です。


回答:


158

使用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などを使用して簡単にインストールできます)。これらの場合はddhead代わりにまたはを使用する必要があります。


2
ワオ。とてもいい、私はこれを知りませんでした。
n611x007

男はそれをすべて言います:切り捨て-ファイルのサイズを指定されたサイズに縮小または拡張します
-ssedano

12
とてもいいですね。touchしかし、あなたは、単に実行できる必要はありませんtruncate -s 14M filename、それが作成されますfilename直接。
テルドン

クール...これはまさに私が探していたものです...ありがとう@ oliver-salzburg-
fasil

34
これはスパースファイルを作成するようですが、以下の回答( "dd"を使用)は作成しません。違いがあなたにとって重要であるかどうかはわかりませんが、私はそれを指摘すると思いました
-offby1

100

編集:最も簡単な方法はおそらくtruncateAshutosh Vishwa Bandhuの答えですが、@ offby1が指摘しているように、あなたが望んでいないかもしれないスパースファイルを作成します。以下のソリューションは、通常の完全なファイルを作成します。


次のコマンドは、呼び出された14メガバイトのファイルを作成しますfoo

  1. fallocate(コメントでそれを提案してくれた@Breakthroughに感謝し、それについて言及している以下のAhmed Masudの回答に投票してください。)

    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
    
  2. ランダムデータで満たされたファイルを作成する

    dd if=/dev/urandom of=foo bs=14MB count=1
    

                                                                              または

    head -c 14MB /dev/urandom > foo
    
  3. \0sで満たされたファイルを作成します。

    dd if=/dev/zero of=foo.txt bs=14MB count=1
    

                                                                              または

    head -c 14MB /dev/zero > foo
    
  4. 別のファイルの最初の14MBのデータで満たされたファイルを作成します。

    head -c 14MB bar.txt > foo
    
  5. 別のファイルの最後の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

2
ありがとう...これは、目的のサイズのファイルを作成するという私の目的も満たします
...-fasil

2
ddより単純で、破壊の可能性が低いアプローチがある場合は、使用しないことをお勧めします。
アコライト

3
@acolyteもそうです。だからこそ、各ddソリューションには非ddの選択肢があります。
テルドン

1
wikiエントリは、dd(ゼロを含む)でさえスパースファイルを作成すると言っていますよね?en.wikipedia.org/wiki/Sparse_file
マイケル

1
@Michael私はチェックしましたが、念のため、どのコマンドもスパースファイルを生成しません。ddwikiページのコマンドは完全に異なり、を使用しません/dev/zero。かどうかについてはMかがMB、より論理的である、開発者とそれを取ります。headtail、およびddのマニュアルページにはすべて、「MB = 1000 * 1000、M = 1024 * 1024」と明記されています。これは他の* nixでは異なる場合があります。
テルドン

21
dd bs=1MB count=14 if=/dev/zero of=<yourfilename>

警告 ddは、意図的にまたは誤って書き込みを指定した場合、書き込み権限を持っているものすべて静かに上書きます。必ず理解してくださいdd。読書dd --helpで、あなたはあなたのddコマンドラインを台無しにしないか、そうでなければあなたは簡単に不可逆的なデータ損失を作成することができます- 合計

開始の場合if=は、入力ファイルof=あり、出力ファイルです。コマンドを実行する前に、正しいことを常に再確認してください。:)


13

マジックを使用するdd;)manページ

$ 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

そして、あなたはゼロで満たされた14MBのoutput.datファイルを取得します:D


8

これはそれをする最も速い方法であるはずです:

SEEK=$SIZE-1
dd if=/dev/zero of=outfile bs=1 seek=$SEEK count=1 

それ以外の場合は、正確な位置にシークし、1バイトを書き込む、高速でダーティなCまたはperlプログラムを作成します。これは、ブロックに実際にデータをダンプするよりもはるかに高速です。

スパースファイルを回避する場合は、Linux(および他のシステム)でfallocate -l <length>from を使用できますutil-linux

それが利用できず、POSIX準拠のシステムを使用している場合、posix_fallocate()ライブラリー呼び出しを使用して、迅速でダーティーなプログラムを作成できます。posix_fallocateは、指定された範囲の割り当てを保証するため、正常に返された場合、その後の範囲の使用時にディスクがいっぱいになることはありません


6

一方でddそれを行うための移植可能な方法で、コマンドmkfileとはxfs_mkfile、この目的のために特別に書かれており、高速化されています。

mkfile size[b|k|m|g] filename
xfs_mkfile size[b|k|m|g] filename

キャッチは、どちらのコマンドも普遍的に利用できないため、移植可能なスクリプトを書くのには適していません。ただし、コマンドラインを介して対話的に行う場合は、これらが使用するコマンドです。

デフォルトでは、スパース(または「穴あき」)ファイルではなく、ゼロで埋められたファイルを作成します。両方とも、-n代わりにスパースファイルを作成するオプションを取ります。


1

Perlには別のオプションがあります。

perl -e 'print "a" x 1024' > file.txt

これにより、1KBファイルが作成されます。1024を任意の数字に置き換えます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.