Truncar ficheros en Linux

Aprendemos a truncar o vaciar ficheros en sistemas GNU/Linux. Muchas veces vamos a necesitar vaciar ficheros, esto es dejarlos a 0, sin borrarlos, por ejemplo en el caso de ficheros de registro o en la salida de nohup.

Al final todo maestrillo tiene su librillo, es decir, cada persona puede tener su forma favorita de hacer las cosas. Podemos utilizar comandos como echo, cat o true, aquí vemos algunos ejemplos:

Truncar ficheros con el comando echo
$ cat hola.txt
En un lugar de la mancha
$ ls -l hola.txt
-rw-r--r-- 1 davidochobits davidochobits 25 Sep 23 11:53 hola.txt
$ echo -n "" > hola.txt
$ ls -l hola.txt
-rw-r--r-- 1 davidochobits davidochobits 0 Sep 23 11:53 hola.txt

Con el parámetro -n no genera el salto de línea final.

Truncar ficheros con el comando cat
$ ls -l hola.txt
-rw-r--r-- 1 davidochobits davidochobits 25 Sep 23 11:56 hola.txt
$ cat /dev/null > hola.txt
$ ls -l hola.txt
-rw-r--r-- 1 davidochobits davidochobits 0 Sep 23 11:58 hola.txt

En este caso hemos utilizado el fichero especial /dev/null, que el sistema utiliza como un cajón desastre para enviar todo lo que queramos dejar a 0. Se suele utilizar mucho en guiones o scripts para cuando no queremos dejar ningún registro.

Truncar ficheros con el comando true
$ ls -l hola.txt
rw-r--r-- 1 davidochobits davidochobits 25 Sep 23 12:05 hola.txt
$ true > hola.txt
$ ls -l hola.txt
-rw-r--r-- 1 davidochobits davidochobits 0 Sep 23 12:06 hola.txt

Este comando no es muy conocido. Con true si miramos su definición con el comando man es no hacer nada, con éxito. También se suele utilizar en los scripts, para que una salida siempre sea exitosa.

Truncar varios ficheros a la vez en Linux

Si queremos truncar una serie de ficheros que coincidan con un patrón, lo podemos hacer utilizando comandos como find o utilizando for, por ejemplo:

# Utilizando find
find -type f -name "hola*.txt" -exec sh -c 'true > $1' sh {} \;
# Utilizando un for
for i in $(find -type f -name "hola*.txt"); do true > $i; done

Y esto es todo, espero que esta información os sea de utilidad en algún momento.

Fuentes consultadas

Página de man de find

Página de man de cat

Página de man de true