GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie entferne ich X Bytes vom Ende einer großen Datei, ohne die gesamte Datei zu lesen?

Verwenden Sie die Funktion truncate

http://linux.die.net/man/2/truncate

int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length); 

truncate übernimmt den Dateinamen
ftruncate nimmt einen offenen Dateideskriptor

beide setzen die Dateilänge auf length es wird also entweder gekürzt oder verlängert (im letzteren Fall wird der Rest der Datei mit NULL/NULL gefüllt)

[Bearbeiten]
truncate (Linux-Shell-Befehl) funktioniert auch

**SYNTAX**

truncate -s integer <filename>  
**OPTIONS**

-s number specify the new file length. If the new length is smaller than the current filelength data is lost. If the new length is greater the file is padded with 0. You can specify a magnitude character to ease large numbers:
b or B size is bytes.
k size is 1000 bytes.
K size is 1024 bytes.
m size is 10^6 bytes.
M size is 1024^2 bytes.
g size is 10^9 bytes.
G size is 1024^3 bytes.


**EXAMPLES**

To shrink a file to 10 bytes:

truncate -s 10 /tmp/foo

To enlarge or shrink a file to 345 Megabytes:

truncate -s 345M /tmp/foo

[/bearbeiten]


Obwohl es viele Verweise auf die truncate gab Funktion in diesem Thread beantwortete niemand wirklich die Frage des OP nach dem Reduzieren einer Datei um einen festen Betrag aus einer Skriptumgebung. Kevins Antwort verwendete truncate um die Größe der Zieldatei auf einen festen Betrag zu ändern, aber natürlich erfordert die Korrektheit dieser Lösung, dass der Benutzer zuerst die Größe der Zieldatei abzüglich der irrelevanten Daten am Ende kennt. Wir haben also:

   -s, --size=SIZE
          set or adjust the file size by SIZE bytes

Truncate unterstützt tatsächlich das direkte Entfernen von Daten vom Ende einer Zieldatei, indem SIZE ein - vorangestellt wird Charakter.

Um beispielsweise die Größe einer Datei um 314 Byte zu ändern, können Sie Folgendes tun:

truncate --size=-314 target_file.bin


Die Verwendung von "truncate" ist der beste Weg, ich poste nur einige Beispiele:

  1. Ich habe eine Datei "PNav-h.db", sie hat 50176 Bytes.

    -rw-r--r--  1 user user 50176 Mar  8 23:43 PNav-h.db
     $truncate -s 1000 PNav-h.db
    

    es setzt die Dateigröße auf 1000 Byte

     -rw-r--r--  1 user user  1000 Mar  9 00:02 PNav-h.db
    
  2. Verwenden Sie für Ihren Fall $truncate --size=xxx xxfilename , mit -<size number> um die Dateigröße zu reduzieren

    $truncate --size=-300 PNav-h.db
    -rw-r--r--  1 user user   700 Mar  9 00:07 PNav-h.db
    

    endgültige Dateigröße =1000-300=700

  3. mit +<size number> um die Dateigröße zu erhöhen

    $truncate --size=+500 PNav-h.db
    -rw-r--r--  1 user user  1200 Mar  9 00:09 PNav-h.db
    

    endgültige Dateigröße =700 + 500 =1200

  4. wenn es kein - gibt oder + , um die Dateigröße einzustellen.

    $truncate --size=60000 PNav-h.db
    -rw-r--r--  1 user user 60000 Mar  9 00:12 PNav-h.db 
    

    endgültige Dateigröße auf 60000 gesetzt


Linux
  1. Bash-Skript zum Entfernen der ältesten Datei aus einem Ordner?

  2. So erhöhen Sie die Datei-Download-Größenbeschränkung in Apache

  3. So zeigen Sie Dateigröße/-details über den Befehl ls in Unix an

  4. Wie extrahiere ich einen einzelnen Byteblock aus einer Datei?

  5. So erhalten Sie die Größe von tar.gz in (MB) Datei in Python

So entfernen Sie ein Passwort aus einer PDF-Datei unter Linux

So entfernen Sie (^M) Zeichen aus einer Datei in Linux

Wie entferne ich Zeilenumbrüche aus einer Textdatei?

Wie entferne ich die Zeilen, die in Datei B erscheinen, aus einer anderen Datei A?

Wie entferne ich das Cache-Gerät aus bcache?

Bash-Skript zum Entfernen der ältesten Datei aus einem Ordner