Mit dem abschneiden der ersten 100 MB eine Datei in linux
Beziehe ich mich auf Wie können Sie verketten zwei großen Dateien mit sehr wenig spare Speicherplatz?
Ich bin mitten in der Umsetzung der folgenden:
- Weisen Sie eine Datei mit geringer Dichte die kombinierte Größe.
- Kopieren von 100Mb am Ende der zweiten Datei an das Ende der neuen Datei.
- Abschneiden 100Mb der am Ende der zweiten Datei
- Loop 2&3 bis Sie fertig die zweite Datei (Mit 2. geändert an der richtigen Stelle in die Ziel-Datei).
- 2&3&4 aber mit der ersten Datei.
Ich würde gerne wissen, ob es jemanden gibt, die in der Lage sind, zu "kürzen" eine bestimmte Datei in linux? Die Kürzung ist durch die Größe der Datei, zum Beispiel, wenn die Datei 10 GB, würde ich gerne abschneiden, die ersten 100 MB die Datei und verlassen Sie die Datei mit der restlichen 9.9 GB. Wer könnte dabei helfen?
Dank
- Hast du google für
Linux file truncate
? Es würde Ihnen gute Antworten! - mögliche Duplikate von Truncate Datei, die auf der Vorderseite
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beantworten, nun, das ist die Realität mit der Linux-kernel v3.15 (ext4/xfs)
Lesen Sie hier
http://man7.org/linux/man-pages/man2/fallocate.2.html
Testen von code
GNU_SOURCE_
muss definiert werden, bevor Sie die Aufnahmefcntl.h
– zumindest auf Ubuntu 16.04. Nur dannfallocate
undFALLOC_FL_COLLAPSE_RANGE
erhältlich sind gnu-spezifische (experimentelle) features.man 1 fallocate
. Wie diese:fallocate -c -o offset -l length filename
. Sie müssenapt install util-linux
(wie von Ubuntu 18.04).Abhacken der Anfang der Datei ist nicht möglich mit den meisten Datei-Systeme, und es gibt keine Allgemeine API, es zu tun; zum Beispiel die truncate-Funktion ändert lediglich die Endung einer Datei.
Können Sie in der Lage, es zu tun mit einigen Dateisystemen, obwohl. Zum Beispiel das ext4-Dateisystem vor kurzem bekam einen ioctl, die Sie nützlich finden können: http://lwn.net/Articles/556136/
Update: Etwa ein Jahr nach dieser Antwort wurde geschrieben, Unterstützung für entfernen Blöcke, die Sie von Anfang und Mitte der Dateien auf die ext4-und xfs-Dateisystemen wurde Hinzugefügt, um die
fallocate
- Funktion, durch dieFALLOC_FL_COLLAPSE_RANGE
- Modus. Es ist bequemer als mit den low-level-iotcl ' s sich selbst.Es gibt auch eine command line utility mit dem gleichen Namen wie die C-Funktion. Angenommen, Ihre Datei in einem unterstützten Dateisystem, das löscht die ersten 100MB:
truncate
Befehl, um manuell die Datei kürzen der Rute durch die sich die Größe der Datei subtrahieren von 100 MB. Danke für die Anregung, aber...Bitte Lesen Sie ein gutes Linux-Buch über Programmierung, z.B. Advanced Linux Programming.
Müssen Sie Linux-kernel Aufrufe, siehe syscalls(2)
Insbesondere truncate(2) (beide abschneiden und für die Verlängerung eine sparse-Datei auf Datei-Betriebssystemen), und stat(2), um insbesondere erhalten die Größe der Datei.
Gibt es keine (Mobil-oder Dateisystem-neutral) Methode zum entfernen von bytes vom Anfang (oder mitten in) einer Datei, können Sie abschneiden einer Datei nur an dessen Ende.
truncate -s 4k filename.txt
. Was ich will, ist meine Datei reduzieren Ihr entweder Kopf oder Schwanz von 100MB. Ist das erreichbar?Wenn Sie arbeiten mit ASCII-Zeilen und nicht Byte, dann das entfernen der ersten n Zeilen einer Datei ist einfach. Zum Beispiel zum entfernen der ersten 100 Zeilen:
Dies ist eine ziemlich alte Frage jetzt, aber hier ist mein nehmen auf Sie. Ohne die Voraussetzung dafür zu tun, mit wenig Platz zur Verfügung haben, würde ich etwas ähnliches wie die folgende abschneiden, die ersten 100 MB Datei:
Erklärung:
entfernen Sie alle, aber die letzten 10000 Zeilen aus einer Datei
sed-i 1,$(($(wc -l < Pfad/zu/Datei) -10000))d Pfad/zur/Datei