Ich habe eine Datei, die ich auffüllen möchte, bis sie 16 MB (16777216 Byte) erreicht. Derzeit sind es 16515072 Bytes. Die Differenz beträgt 262144 Bytes.
Wie fülle ich es auf?
Das scheint nicht zu funktionieren:
cp smallfile.img largerfile.img
dd if=/dev/zero of=largerfile.img bs=1 count=262144
bs=1
indd
ist in meiner Erfahrung sehr Runtime teuer.truncate -s 16M thefile
Antworten:
Löschen Sie das
of=largerfile.txt
und hängen Sie stdout an die Datei an:quelle
seek
ist hier eine richtige Option.Neben den Antworten, um eine physische Auffüllung zu erhalten, können Sie auch den größten Teil der Auffüllfläche in der Datei leer lassen ("Löcher"), indem
seek
Sie an die neue Endposition der Datei gehen und ein einzelnes Zeichen schreiben:(Das hat den Vorteil, dass es viel leistungsfähiger ist
bs=1
und nicht viel zusätzlichen Speicherplatz belegt.)Diese Methode scheint zu funktionieren, auch wenn Sie kein Zeichen hinzufügen, indem Sie
if=/dev/null
und die endgültige gewünschte Dateigröße verwenden:Eine performante Variante einer physikalischen Auffülllösung, die größere Blockgrößen verwendet, ist:
quelle
truncate -s +262144 largerfile.txt
wäre auch schnell.Die beste Antwort hier ist die von Janis (oben), da Sie die aktuelle Dateigröße vergessen und ohne Berechnung direkt auf die gewünschte Größe auffüllen können.
Es nutzt auch die Vorteile von Dateien mit geringer Dichte, die mit / dev / zero nicht erreicht werden.
Die Antwort könnte jedoch ordentlicher sein, da 'count' 0 sein darf und Sie trotzdem die Auffüllung erhalten:
(Bearbeiten: Dies ist korrekt für GNU dd, aber das Verhalten von
count=0
ist plattformspezifisch, siehe Kommentare.)quelle
count=0
ist nicht angegeben, entspricht jedoch in der Regel dercount
Angabe, als kein Parameter angegeben wurde. Weitere Probleme:dd
Kürzt die Datei auf 16777216 Byte. Wenn Sie jedoch hoffen, dass am Ende eine Lücke entsteht, täuschen Sie sich, da Sie zuerst Daten nach der Lücke schreiben und später auf eine Größe kürzen müssten, die keine Daten enthält .dd if=/dev/zero of=somefile
es dasselbe ist wiedd if=/dev/zero of=somefile count=0
? Versuch es.count=0
ist dasselbe, als ob Sie überhaupt keinen Parameter count angegeben hätten. Dies gilt zumindest für alle Implementierungen, die aus den ursprünglichen Quellen abgeleitet wurden. Probieren Sie es aus, anscheinend haben Sie nie mit dem ursprünglichendd
Befehl gearbeitet.count
Bedeutung "Diesen Parameter ignorieren" angegeben ist. Kannst du welche finden? Ohne eine solche Dokumentationcount=0
bedeutet "Nullblöcke schreiben" und jede Abweichung davon ist ein Fehler ... (Originalquellen oder Nein).Müssen Sie verwenden
dd
? Wenn Sie möchten, dass eine Datei eine bestimmte (logische) Länge hat, schreiben Sie einfach eine Null an die gewünschte Position. Die Bytes zwischen dem vorherigen Ende und dem geschriebenen Byte werden mit Null-Bytes angezeigt. Hier ist ein Beispiel mit Perl.Warum die "- 2" in der Zeile? Das Skript schreibt ein Byte, also subtrahieren wir 1, um nach der Position vor diesem Byte zu suchen. Wir nehmen den anderen weg, weil die Suchposition nullindiziert ist.
quelle