tail -c +32
genera su entrada menos los primeros 31 bytes. (Sí, el argumento está desactivado por uno.) Para editar un archivo en su lugar, use una esponja en un bucle, o si no lo tiene y no quiere molestarse, haga su trabajo en el shell:
for x in /foo/*; do tail -c +32 "$x" | sponge "$x"; done
for x in /foo/*; do tail -c +32 "$x" >"$x.new" && mv "$x.new" "$x"; done
Si los comandos se interrumpen por cualquier motivo (por ejemplo, un corte de energía), puede ser difícil determinar dónde lo dejó. Escribir los nuevos archivos en un directorio separado facilitaría las cosas.
mkdir /foo.tmp
cd /foo
for x in *; do tail -c +42 -- "$x" >"/foo.tmp/$x" && rm -- "$x"; done
mv /foo.tmp/* /foo
rmdir /foo.tmp
Si los archivos son realmente grandes (como en, lo suficientemente grandes como para que tener dos copias de una sola sea un problema), puede usar una de las técnicas mencionadas en este hilo .