Ich möchte die Größe einer Datei brachial verkleinern, das heißt, ich kümmere mich nicht um den Rest, ich möchte nur die Datei etwa halbieren und den Rest wegwerfen.
Das erste, was mir einfällt, ist Perls Kürzung . Ich folge dem Beispiel auf dieser Seite und mache genau dasselbe:
seq 9 > test.txt
ls -l test.txt
perl -we 'open( FILE, "< ./test.txt" ) && truncate( FILE, 8 ) && close(FILE);'
Die Datei hat aber immer noch die gleiche Größe:
$ ls -lgG test.txt
-rw-rw---- 1 18 2013-08-08 09:49 test.txt
Wie kann ich das schaffen?
öffnet die Datei zum Lesen. Um die Datei zu kürzen, müssen Sie sie jedoch ändern, damit ein schreibgeschütztes Dateihandle nicht funktioniert. Sie müssen den Modus "Ändern" (
"+>"
) verwenden.Nebenbei wundert es mich immer, wenn Leute Systemanrufe stillschweigend ausfallen lassen und dann fragen, was schief gelaufen ist. Ein wesentlicher Teil der Problemdiagnose besteht darin, die erzeugte Fehlermeldung zu überprüfen. Selbst wenn Sie es nicht verstehen, erleichtert es denjenigen, die Sie um Hilfe bitten, das Leben erheblich.
Folgendes wäre etwas hilfreicher gewesen:
obwohl zugegebenermaßen das nur "ungültiges Argument" gemeldet hätte. Trotzdem ist das eine nützliche Information und könnte Sie zu der Schlussfolgerung geführt haben, dass der offene Modus falsch war (wie bei mir).
quelle
Sie können verwenden
tail
, um die letzten 100000 Bytes zu schneiden. Beispiel:Das -c gibt die letzten 100000 Bytes der Datei aus, um weitere Optionen zu erhalten:
So ersetzen Sie die Originaldatei durch die soeben erstellte Datei:
quelle
Die Antwort oben unter Berufung auf truncate ist schön. dd erledigt auch die Arbeit:
quelle
Es gibt eine ganz andere Möglichkeit, dies mit bash mit dem Programm ed zu tun. Das folgende Skript speichert nur die letzten 5000 Zeilen aller Dateien im angegebenen Verzeichnis. Dies kann leicht geändert werden, um eine Schleife über mehrere Verzeichnisse zu erstellen, die Anzahl der Zeilen zu ändern usw.
quelle