ultima tagger tag portable mp3tag gratis descargar audioshell linux shell

linux - portable - music tagger



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

¿Qué pasa con el comando truncado?

http://linux.about.com/library/cmd/blcmdl2_truncate.htm

En Linux, tengo un archivo bastante grande con información extraña pegada hasta el final. Digamos, por ejemplo, que sé que hay 314 bytes de datos extraños al final de un archivo de 1.6GB.

Por supuesto, es muy fácil y eficiente agregar más datos al final de un archivo, pero ¿qué puedo hacer para eliminarlo sin tener que copiar la primera parte de ese archivo en otro (o sobrescribir dicho archivo)?

Editar

Estoy viendo algunos buenos consejos para hacer esto en C. Esperaba escribirlo desde la línea de comandos, pero si fallaba, estaría más inclinado a hacerlo en Python que en C.

Veo que Python tiene un método truncado en su objeto de archivo, pero parece estar demoliendo mi archivo, no importa cómo lo use. Debería poder resolverlo, pero desde luego las respuestas son más que bienvenidas.


Aunque hubo muchas referencias a la función truncate en este hilo, nadie respondió realmente la pregunta del OP sobre la reducción de un archivo en una cantidad fija desde un entorno de scripting. La respuesta de Kevin utilizó truncate para redimensionar el archivo de destino a una cantidad fija, pero, por supuesto, la corrección de esta solución requiere que el usuario primero conozca 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 realmente permite eliminar los datos del final de un archivo de destino directamente, prefijando SIZE con un carácter.

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

truncate --size=-314 target_file.bin


En C en un sistema compatible con POSIX (o más generalmente, la mayoría de los sistemas similares a Unix), puede usar las funciones de truncate y ftruncate .


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

    Establece el tamaño del archivo a 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


usar la función truncate

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

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 para que se trunca o se alargue (en este último caso, el resto del archivo se rellenará con NULL / ZERO)

[editar]
truncate (comando shell de linux) funcionará también

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