Datei einer bestimmten Größe generieren?

106

Ich möchte eine Datei mit dem Namen erzeugen example.file. ich könnte benutzen

touch example.file

Ich möchte aber, dass die Datei genau 24 MB groß ist. Ich habe die Manpage von touch bereits überprüft, aber es gibt keinen solchen Parameter. Gibt es eine einfache Möglichkeit, Dateien einer bestimmten Größe zu generieren?

R_User
quelle
Wir gehen alle davon aus, dass es Ihnen egal ist, wie der Inhalt mit Nullen gefüllt ist.
Bgs

Antworten:

136

Sie können dd verwenden:

dd if=/dev/zero of=output.dat  bs=24M  count=1

oder

dd if=/dev/zero of=output.dat  bs=1M  count=24

oder auf dem Mac

dd if=/dev/zero of=output.dat  bs=1m  count=24
Paul92
quelle
2
... oder benutze bs = 1M und count = 24. Viele finden es schöner und leichter zu lesen.
Bgs
3
Vielleicht verwenden Sie keine großen Blockgrößen, mein System mochte nichtbs=1G count=1
ThorSummoner
10
Verwenden Sie auf dem Mac 24m (kleines m), da der Mac das große M nicht mag.dd if=/dev/zero of=output.dat bs=24m count=1
SPRBRN
1
Unter Android (5.1.1, möglicherweise versions- oder telefonspezifisch) musste ich auch Kleinbuchstaben verwenden m.
Erik
1
Was ist das Problem speziell bei großen Blockgrößen? Ich hatte gehofft, eine 1G-Blockgröße für eine 1G-Datei zu verwenden.
Felwithe
43

Unter nicht eingebettetem Linux oder Cygwin (oder jedem System mit GNU-Coreutils) und FreeBSD:

truncate -s 24m example.file

Dadurch wird eine Datei mit null Bytes erstellt. Wenn die Datei bereits vorhanden und kleiner ist, wird sie mit null Byte auf die angeforderte Größe erweitert. Wenn die Datei bereits vorhanden und größer ist, wird sie auf die angeforderte Größe gekürzt.

Die Null-Bytes belegen keinen Speicherplatz, die Datei ist eine Sparse-Datei .

Erstellt auf vielen Systemen head -c 24m </dev/zero >example.fileeine Nicht-Sparse-Datei mit Null-Bytes. Wenn auf Ihrem System headkeine -cOption vorhanden ist (dies ist üblich, jedoch nicht in POSIX), können Sie diese verwenden dd bs=1024k count=24 </dev/zero >example.file(dies ist POSIX-kompatibel).

Gilles
quelle
BusyBox hat es auch , also werden die meisten eingebetteten Systeme auch :-)
Ciro Santilli am
29

Wenn Ihnen der Inhalt der Datei egal ist, ist dies viel schneller als die Verwendung von dd:

fallocate -l 24M filename

Die Verwendung ddeiner 24-MB-Datei nimmt auf einem modernen System natürlich keine Zeit in Anspruch, größere Dateien können jedoch merklich langsam sein.

SArcher
quelle
13

Sie können dd verwenden:

dd if = / dev / zero von = outputfile.out bs = 1024k count = 24

Oder für den Fall, dass Sie Solaris verwenden

mkfile 24m outputfile.out
BitsOfNix
quelle
3
mkfile scheint auch auf macOS präsent zu sein
Ben Flynn
Sie können auch übergeben -n, um eine spärliche Datei zu erstellen
russbishop
0
FROM_NODE=N01;
echo; cd $MOUNT_PATH; pwd; ls -la; sleep 1; echo;
WHEN="$(date +%Y-%m-%d_%H-%M-%S)";
fallocate -l 10M $MOUNT_PATH/"$FROM_NODE"_"$WHEN".dump
ls -lha; echo;
Pascal Andy
quelle
1
Heißt das nicht 10 Megabyte, während der Q nach 24 fragt?
Jeff Schaller
2
fallocatekönnte eine gute antwort sein, aber warum all die anderen leitungen? Schneiden Sie Ihre Antwort so ab, dass sie genau das tut, worum Sie gebeten wurden, und nicht mehr.
JigglyNaga
1
Wenn Sie Sir bevorzugen: fallocate -l 10M somefile.dump
Pascal Andy