Linux / Befehl truncate: Dateigröße verkleinern oder vergrößern

truncate ändert die logische Größe einer Datei. Beim Verkleinern gehen Bytes hinter dem neuen Ende verloren; beim Vergrößern kann ein Sparse-Bereich entstehen, dessen logische Größe vom tatsächlich belegten Speicherplatz abweicht.

Die Beispiele verwenden das Verhalten von GNU Coreutils. Prüfen Sie truncate --help, man truncate und die Dokumentation Ihrer Distribution, wenn Portabilität oder eine versionsspezifische Option wichtig ist.

Ergänzende Befehle und Anwendungsfälle finden Sie in Wesentliche Linux-Befehle: Eine praktische Referenz nach Aufgaben.

Was ist der Befehl truncate?

truncate verkleinert oder erweitert die logische Länge von Dateien. Beim Verkleinern werden Bytes hinter dem neuen Ende verworfen. Das Erweitern erstellt normalerweise einen Sparse-Bereich, der als Null gelesen wird, ohne sofort jeden Block zuzuweisen. Fehlende Dateien werden erstellt, es sei denn, -c wird verwendet.

Grundlegende Syntax

truncate [OPTION]... FILE...

Setzen Sie Anführungszeichen um Pfade, die Leerzeichen enthalten. Wenn unterstützt, setzen Sie -- vor Operanden, die mit einem Bindestrich beginnen, damit sie nicht als Optionen interpretiert werden.

Grundlegende truncate-Nutzung

Eine Datei auf Null Bytes reduzieren

Der Verzeichniseintrag und die Attribute bleiben bestehen, während die Inhaltslänge auf null gesetzt wird. Verwenden Sie eine anwendungsbewusste Rotation, anstatt aktive Servicelogs blind zu kürzen.

truncate -s 0 application.log

Erstellen Sie eine Datei mit einer angegebenen logischen Größe

Suffixe wie M und GiB definieren die angeforderte Größe. Die resultierende Datei kann eine Sparse-Datei sein.

truncate -s 100M test.img
truncate -s 1GiB sparse.img

Wachsen oder schrumpfen relativ zur aktuellen Größe

Ein führendes Pluszeichen vergrößert die Datei und ein führendes Minuszeichen verkleinert sie um die angegebene Menge.

truncate -s +10M data.bin
truncate -s -512K data.bin

Überprüfen Sie die Größe nach dem Leeren des Inhalts

truncate zeigt normalerweise keine Meldung an, selbst wenn es erfolgreich ist. Das Anwenden von -s 0 auf eine vorhandene Datei setzt deren Byte-Größe auf 0.

printf 'abc' > demo.txt
truncate -s 0 demo.txt
stat -c '%s %n' demo.txt

Eine Beispielausgabe ist 0 demo.txt. Der Dateiinhalt kann nicht wiederhergestellt werden, also stellen Sie sicher, dass Sie Sicherungen und Zielpfade überprüfen, bevor Sie es auf tatsächlichen Protokollen oder Datendateien verwenden.

Wichtige Optionen

Option Zweck
-s SIZE Größe festlegen oder anpassen.
-c Fehlende Dateien nicht erstellen.
-r FILE Verwenden Sie die Größe einer Referenzdatei.
-o Interpretieren Sie die Größe in den I/O-Blöcken der Datei statt in Bytes.

Lange Optionen machen überprüfte Skripte oft leichter verständlich. Wenn ein Skript auf Nicht-GNU-Systemen laufen muss, überprüfen Sie jede nicht-POSIX-Option auf der Zielplattform.

Praktische Beispiele

Die Größe einer Referenzdatei anpassen

Die Option -r kopiert nur die Größe, nicht den Inhalt.

truncate -r reference.img target.img
stat -c '%s %n' reference.img target.img

Eine maximale oder minimale Größe anwenden

GNU-Größenpräfixe können eine Datei nur ändern, wenn sie über oder unter einem Schwellenwert liegt. Shell-empfindliche Präfixe zitieren.

truncate -s '<100M' cache.bin
truncate -s '>1M' placeholder.bin

Vergleichen Sie logische Größe und zugewiesenen Speicherplatz

Ein erweiterter Bereich kann ein nicht vollständig belegter Bereich (Sparse Hole) sein. Verwenden Sie stat und du, um logische Länge von zugewiesenem Speicher zu unterscheiden.

truncate -s 1G sparse.img
stat -c 'size=%s blocks=%b' sparse.img
du -h sparse.img

truncate und verwandte Befehle

Befehl oder Methode Hauptrolle Geeignet für
truncate Ändern Sie das logische Ende einer Datei Schnelles Ändern der Größe und Erstellen von Sparse-Dateien
touch Erstellen Sie eine leere Datei oder ändern Sie Zeitstempel Vorhandene Größe und Inhalt beibehalten
dd Schreiben oder Kopieren von tatsächlichen Datenblöcken Inhalte befüllen oder Geräte abbilden
Werkzeug zur Protokollrotation Archivieren, komprimieren und Protokollwiedereröffnung koordinieren Produktionsdienstprotokolle

Wichtige Hinweise

Schrumpfen zerstört Daten

Bytes über das neue Ende hinaus gehen verloren. Arbeiten Sie an einer Sicherung, wenn die Datei wichtig ist.

Erweitern repariert das interne Format nicht

Die Vergrößerung der Länge eines Image- oder Dateisystemcontainers erweitert dessen interne Strukturen nicht. Verwenden Sie das format-spezifische Werkzeug.

Sparse-Dateien können während des Kopierens wachsen.

Ein Kopierwerkzeug oder Zieldateisystem, das Löcher nicht beibehält, kann die volle logische Größe verbrauchen.

FAQ

Löscht truncate -s 0 die Datei?

Nein. Es behält den Dateieintrag und die Attribute bei, während die Länge auf null gesetzt wird.

Belegt das Erweitern einer Datei den gesamten Speicherplatz?

Nicht unbedingt. Die Erweiterung kann als Sparse-Bereich erfolgen; vergleichen Sie stat und du.

Wie vermeide ich es, eine fehlende Datei zu erstellen?

Verwenden Sie truncate -c -s SIZE FILE.

Kopiert -r Daten von der Referenz?

Nein. Es kopiert nur die Größe der Referenzdatei.

Weitere Angaben zu Syntax, Implementierung und Verfügbarkeit finden Sie unter GNU Coreutils truncate Dokumentation und GNU Coreutils-Handbuch.