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.




