GNU/Linux >> Znalost Linux >  >> Linux

Jak odstranit X bajtů z konce velkého souboru bez přečtení celého souboru?

použijte funkci truncate

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

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

truncate převezme název souboru
ftruncate má otevřený deskriptor souboru

oba nastavují délku souboru na length takže se buď zkrátí, nebo prodlouží (v druhém případě bude zbytek souboru vyplněn NULL/ZERO)

[upravit]
truncate (příkaz linuxového shellu) bude také fungovat

**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

[/edit]


Ačkoli tam bylo mnoho odkazů na truncate funkce v tomto vláknu, nikdo skutečně neodpověděl na otázku OP o zmenšení souboru o pevnou částku ze skriptovacího prostředí. Kevinova odpověď použila truncate změnit velikost cílového souboru na pevné množství, ale správnost tohoto řešení samozřejmě vyžaduje, aby uživatel nejprve znal velikost cílového souboru mínus nadbytečná data na konci. Takže máme:

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

Truncate ve skutečnosti podporuje odstranění dat z konce cílového souboru přímo přidáním předpony SIZE - charakter.

Chcete-li například změnit velikost souboru o 314 bajtů, můžete provést:

truncate --size=-314 target_file.bin


Použití "zkrátit" je nejlepší způsob, jen zveřejním několik příkladů:

  1. Mám soubor "PNav-h.db", má 50176 bajtů.

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

    nastaví velikost souboru na 1000 bajtů

     -rw-r--r--  1 user user  1000 Mar  9 00:02 PNav-h.db
    
  2. Pro váš případ použijte $truncate --size=xxx xxfilename pomocí -<size number> zmenšit velikost souboru

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

    konečná velikost souboru =1000-300=700

  3. pomocí +<size number> pro zvětšení velikosti souboru

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

    konečná velikost souboru =700 + 500 =1200

  4. pokud neexistuje - nebo + , slouží k nastavení velikosti souboru.

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

    konečná velikost souboru nastavena na 60 000


Linux
  1. Jak přidat nový řádek na konec souboru?

  2. Jak zvýšit limit velikosti stahování souborů v Apache

  3. Jak extrahuji jeden kus bajtů ze souboru?

  1. Jak odstranit řádky, které se objevují v souboru B, z jiného souboru A?

  2. Jak získat velikost tar.gz v (MB) souboru v pythonu

  3. Jak extrahovat text z velkého souboru počínaje prvním výskytem řetězce?

  1. Jak odeberu zařízení mezipaměti z bcache?

  2. Bash skript pro odstranění nejstaršího souboru ze složky

  3. Jak odstranit soubor bez použití rm?