Imagine un archivo creado con:
truncate -s1T file
echo test >> file
truncate -s2T file
Ahora tengo un archivo de 2 tebibytes (que ocupa 4 KB en el disco), con "test\n"
escrito en el medio.
¿Cómo lo recuperaría de manera "test"
eficiente, sin tener que leer todo el archivo?
tr -d '\0' < file
Me daría el resultado, pero eso llevaría horas.
Lo que me gustaría es algo que solo muestre las partes no dispersas del archivo (por lo tanto, solo arriba "test\n"
o más probablemente, el bloque 4kiB asignado en el disco que almacena esos datos).
Hay API para averiguar qué parte del archivo está asignada (FIBMAP, FIEMAP, SEEK_HOLE, SEEK_DATA ...), pero ¿qué herramientas las exponen?
Se agradecería una solución portátil (al menos para los sistemas operativos que admiten esas API).
fuente
strings
?tr
desde que todavía lee todo el archivo y hace más que solo eliminar los bytes NUL.