GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo eliminar X bytes del final de un archivo grande sin leer todo el archivo?

usa la función truncate

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

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

truncar toma el nombre del archivo
ftruncate toma un descriptor de archivo abierto

ambos establecen la longitud del archivo en length por lo que se trunca o se alarga (en este último caso, el resto del archivo se llenará con NULL/ZERO)

[editar]
truncar (comando de shell de Linux) también funcionará

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

[/editar]


Aunque había muchas referencias al truncate función en este hilo, nadie respondió realmente a la pregunta del OP sobre la reducción de un archivo en una cantidad fija desde un entorno de secuencias de comandos. La respuesta de Kevin usó truncate para cambiar el tamaño del archivo de destino a una cantidad fija, pero, por supuesto, la corrección de esta solución requiere que el usuario sepa primero el tamaño del archivo de destino menos los datos extraños al final. Entonces, tenemos:

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

Truncate en realidad admite la eliminación de datos desde el final de un archivo de destino directamente anteponiendo SIZE con un - personaje.

Por ejemplo, para cambiar el tamaño de un archivo en 314 bytes, puede hacer:

truncate --size=-314 target_file.bin


Usar "truncar" es la mejor manera, solo publico algunos ejemplos:

  1. Tengo un archivo "PNav-h.db", tiene 50176 bytes.

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

    estableció el tamaño del archivo en 1000 bytes

     -rw-r--r--  1 user user  1000 Mar  9 00:02 PNav-h.db
    
  2. Para su caso, use $truncate --size=xxx xxfilename , usando -<size number> para reducir el tamaño del archivo

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

    tamaño final del archivo =1000-300=700

  3. usando +<size number> para aumentar el tamaño del archivo

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

    tamaño final del archivo =700 + 500 =1200

  4. si no hay - o + , es para establecer el tamaño del archivo.

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

    tamaño de archivo final establecido en 60000


Linux
  1. ¿Cómo agregar una nueva línea al final de un archivo?

  2. Cómo aumentar el límite de tamaño de descarga de archivos en Apache

  3. Cómo ver el tamaño/los detalles del archivo desde el comando ls en Unix

  4. ¿Cómo elimino líneas nuevas de un archivo de texto?

  5. Bash script para eliminar el archivo más antiguo de una carpeta

Cómo quitar la contraseña de un archivo PDF en Linux

Cómo quitar (^M) caracteres de un archivo en Linux

¿Cómo eliminar las líneas que aparecen en el archivo B de otro archivo A?

Cómo obtener el tamaño de tar.gz en un archivo (MB) en python

¿Cómo extraer texto de un archivo grande, comenzando en la primera aparición de una cadena?

¿Cómo elimino el dispositivo de caché de bcache?