Quiero reducir el tamaño de un archivo por fuerza bruta, es decir, no me importa el resto, solo quiero cortar el archivo, digamos a la mitad, y descartar el resto.
La primera cosa que viene a la mente es de Perl truncado . Estoy siguiendo el ejemplo en esa página e hice exactamente lo mismo:
seq 9 > test.txt
ls -l test.txt
perl -we 'open( FILE, "< ./test.txt" ) && truncate( FILE, 8 ) && close(FILE);'
Pero el archivo todavía tiene el mismo tamaño:
$ ls -lgG test.txt
-rw-rw---- 1 18 2013-08-08 09:49 test.txt
¿Cómo puedo hacer que esto funcione?
abre el archivo para leer. Sin embargo, para truncar el archivo, debe modificarlo, por lo que un identificador de archivo de solo lectura no funcionará. Necesita usar el modo "modificar" (
"+>"
).Como cuestión secundaria, siempre me sorprende cuando las personas dejan que las llamadas del sistema fallen silenciosamente y luego preguntan qué salió mal. Una parte esencial del diagnóstico de un problema es mirar el mensaje de error producido; incluso si no lo entiendes, hace la vida mucho más fácil para quienes pides ayuda.
Lo siguiente habría sido algo más útil:
aunque es cierto que solo habría informado "argumento inválido". Aún así, esa es información útil y bien podría haberte llevado a la conclusión de que el modo abierto era incorrecto (como lo hizo para mí).
fuente
Puede usar
tail
para cortar los últimos 100000 bytes, por ejemplo:El -c genera los 100000 bytes finales del archivo, para más opciones:
Para reemplazar el archivo original con el archivo que acaba de generar:
fuente
La respuesta anterior citando truncado es agradable. dd también hará el trabajo:
fuente
Hay una manera completamente diferente de hacer esto, con bash, usando el programa ed. el siguiente script retendrá solo las últimas 5000 líneas de todos los archivos que se encuentran en el directorio especificado. Esto se puede modificar fácilmente para recorrer varios directorios, cambiar el número de líneas, etc.
fuente