Ich habe in Windows einen Weg gefunden, so etwas zu tun
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/
Gibt es in UNIX eine Möglichkeit, eine Datei zu kopieren, anzufügen und den Vorgang dann zu wiederholen? So etwas wie for .. cat file1.txt > file1.txt
?
for i in {1..1000000};do echo "string" >> file;done
in bash.type file >> file
, in einer Endlosschleife zu laufen (zumindest sobald es groß genug ist, dass es nicht in einen Puffer passt).Antworten:
Mit
csh
/tcsh
:Mit
zsh
:Zu GNU-Systemen siehe auch:
Oder:
(Erstellt eine 10-TB-Sparse-Datei (sehr groß, nimmt aber keinen Speicherplatz auf der Festplatte ein)) und die anderen unter "Erstellen einer Testdatei mit vielen Null-Bytes" beschriebenen Alternativen .
Tun
cat file >> file
wäre eine schlechte Idee.Erstens funktioniert es nicht mit einigen
cat
Implementierungen, die das Lesen von Dateien verweigern, die mit ihrer Ausgabedatei identisch sind. Aber selbst wenn Sie es umgehencat file | cat >> file
, wennfile
es größer alscat
der interne Puffer ist, würde dies dazu führen, dass escat
in einer Endlosschleife ausgeführt wird, da es am Ende die Daten liest, die es zuvor geschrieben hat.Auf Dateisystemen, die von einer rotierenden Festplatte gesichert werden, wäre dies ebenfalls ziemlich ineffizient (nach Erreichen einer Größe, die größer ist als die, die möglicherweise im Speicher zwischengespeichert wird), da das Laufwerk zwischen dem Ort, an dem die Daten gelesen werden sollen, hin und her wechseln müsste. und das wo man es schreibt.
quelle
dd if=/dev/zero of=large-file bs=1024 count=1024
für eine 1MB-Dateidd if=/dev/zero of=test bs=1M count=1
ich klarer.dd
, aber ich habe nie verstanden warum. In der Tat denke ich, ich habe es immer nur verwendet, um einen MBR oder ähnliche Randaufgaben zu lesen. Nach meiner Erfahrung sind andere Tools in den allermeisten Fällen, in denen Benutzer sie verwenden, schneller, einfacher und sichererdd
. Ich denke, dies ist einer jener Fälle, in denen häufig! = Optimal, wiesudo su
odercat file | grep foo
.Sie können unter Solaris eine große Datei erstellen, indem Sie Folgendes verwenden:
Ein anderer Weg, der unter Solaris (und Linux) funktioniert:
Es ist auch möglich:
quelle
truncate
gibt es unter Solaris 11.2+Der schnellste Weg, eine große Datei in einem Linux-System zu erstellen, ist
fallocate
:fallocate
manipuliert das Dateisystem und schreibt standardmäßig nicht wirklich in die Datensektoren und ist daher extrem schnell. Der Nachteil ist, dass es als root ausgeführt werden muss.Wenn Sie es nacheinander in einer Schleife ausführen, können Sie das größte Dateisystem in Sekundenschnelle füllen.
Von
man fallocate
quelle
Dies wird so lange fortgesetzt, bis Sie STRG-C:
yes This is stuff that I want to put into my file... >> dummy.txt
Seien Sie vorsichtig, denn Sie können Hunderttausende von Zeilen pro Sekunde erhalten ...
Von
man yes
:quelle
yes $BIG_STRING | head -c $TARGET_SIZE >> dummy.txt
würden Sie genaue Menge bekommen. (-n $ TARGET_NUMBER_OF_LINES).yes
würde automatisch als Ergebnis eines "Rohrbruchs" sterben, wennhead
terminiert wird, weil die Zielnummer erreicht wurde.Wenn ich Sie richtig verstehe, suchen Sie nach etwas wie:
Dadurch wird eine Datei mit 22 Wiederholungen der "Testzeile" erstellt. Wenn Sie eine bestimmte Dateigröße wünschen, können Sie so etwas verwenden (unter Linux). 1024 ist ein Kilobyte:
Persönlich, wenn ich eine große Datei erstellen möchte, verwende ich zwei Dateien und katze eine in die andere. Sie können den Vorgang wiederholen, bis Sie die gewünschte Größe erreicht haben (1 MB hier):
Beachten Sie, dass diese Lösung häufig die gewünschte Größe überschreitet. Wenn die Datei unter dem Grenzwert liegt, wird alles erneut in die Datei gecattet.
Wenn Sie nur eine Datei der gewünschten Größe benötigen, die eigentlich nichts enthalten muss, können Sie Folgendes verwenden
truncate
:quelle
cat
tatsächlich einen Vorteil, die Datei nur anzuhängen? Es scheint, als würde es länger dauern, da zwei Prozesse in jeder Schleife gespalten werden müssen und außerdem der gesamte Inhalt mehrmals verschoben werden muss.cat
Ansatz ist viel, viel schneller. Es macht nur Sinn, große Dateien zu erstellen, aber das hat eine 545M-Datei in 10 Sekunden auf meinem Computer erstellt. Die gleichewhile
Schleife mitecho "test line" >> file
einer 96K - Datei in dem gleichen Zeitbetrag angelegt.truncate
Nähe sind, können Sietruncate -s 1G
die Datei an erster Stelle erstellen. unix.stackexchange.com/a/269184/85549 . Sie könnten es durch ein ersetzenhead -c $DESIRED_SIZE
, möglicherweise innerhalb derwhile
Schleife.Durch Weiterleiten des Inhalts von
/dev/urandom
to könnenhead
Sie die Ausgabe in eine Datei umleiten.Gibt Ihnen eine Datei mit 100 Bytes Müll.
quelle
Der gleiche Effekt Ihres Windows-Skripts, aber in Bash können Sie eine Datei nicht direkt mit sich selbst verknüpfen.
quelle
.txt
, dass Sie die Erweiterung vergessen haben , hinterlassen Sie am Ende zwei große Dateien.