Immagina un file creato con:
truncate -s1T file
echo test >> file
truncate -s2T file
Ora ho un file da 2 tebibyte (che occupa 4 kB su disco), con "test\n"
scritto nel mezzo.
Come potrei ripristinarlo in modo "test"
efficiente, cioè senza dover leggere l'intero file.
tr -d '\0' < file
Mi darebbe il risultato ma ciò richiederebbe ore.
Quello che mi piacerebbe è qualcosa che emette solo le parti non sparse del file (quindi solo sopra "test\n"
o più probabilmente, il blocco da 4 kB allocato su disco che memorizza quei dati).
Ci sono API per scoprire quale parte del file è allocata (FIBMAP, FIEMAP, SEEK_HOLE, SEEK_DATA ...), ma quali strumenti espongono quelli?
Una soluzione portatile (almeno per i sistemi operativi che supportano tali API) sarebbe apprezzata.
tr
da quando legge ancora l'intero file e fa di più che rimuovere semplicemente i byte NUL.
strings
?