Linux / Comando truncate: reducir y ampliar el tamaño de archivos

truncate reduce o amplía el tamaño lógico de un archivo. Al reducirlo, se pierden los datos posteriores al nuevo final; al ampliarlo, la zona añadida se lee como bytes nulos, que pueden representarse como un área dispersa sin asignación física equivalente.

En este artículo se explican la especificación de tamaño absoluto y relativo, las unidades, el ajuste de tamaño según un archivo de referencia, la diferencia entre archivos dispersos y el uso real del disco, y cómo comprobar los resultados de manera segura.

¿Qué es el comando truncate?

truncate modifica el final del archivo sin copiar otro contenido sobre él. Por defecto crea los archivos ausentes; -c evita esa creación. Debe indicar el tamaño con -s o una referencia con -r. Use un directorio nuevo con archivos de prueba y respalde los datos que quiera conservar. La lista de comandos de uso frecuente en Linux permite comparar esta operación con otras herramientas.

Sintaxis básica

truncate [OPCIONES] ARCHIVO ...

Si el nombre de archivo o ruta contiene espacios, se debe poner entre comillas, y los nombres que comienzan con un guion se deben especificar después de -- si es posible. Las opciones soportadas pueden variar según la distribución y la versión de GNU Coreutils, por lo que consulte la descripción del sistema actual con truncate --help y man truncate.

Uso básico de truncate

Vaciar un archivo a 0 bytes

Se deja el archivo pero se establece la longitud del contenido a 0. Si se vacían de manera arbitraria los registros de un servicio en ejecución, pueden surgir problemas con el offset del archivo o la política de gestión de registros, por lo que primero se debe revisar una herramienta dedicada de rotación de registros.

truncate -s 0 application.log

Crear un archivo de tamaño específico

Indique el tamaño y la unidad con -s. En GNU truncate, M equivale a 1 048 576 bytes, mientras que MB equivale a 1 000 000. G y GiB representan 1 073 741 824 bytes. Los ejemplos crean los archivos si no existen; no los aplique a imágenes o datos que necesite conservar.

truncate -s 100M test.img
truncate -s 1GiB sparse.img

Aumentar o reducir desde el tamaño existente

+ delante del tamaño aumenta, - lo reduce. Para no confundirse con la opción de shell, el valor se pasa exactamente como argumento de -s.

truncate -s +10M data.bin
truncate -s -512K data.bin

Verificar el tamaño después de vaciar el contenido

truncate usualmente no muestra mensaje aunque tenga éxito. Aplicar -s 0 a un archivo existente hará que el tamaño en bytes sea 0.

printf 'abc' > demo.txt
truncate -s 0 demo.txt
stat -c '%s %n' demo.txt

El ejemplo de salida es 0 demo.txt. Como el contenido del archivo no se recupera, antes de usarlo en registros reales o archivos de datos, confirme la ruta de destino y haga una copia de seguridad.

Opciones principales

Opciones Descripción
-s SIZE, --size=SIZE Se especifica el tamaño del archivo o se ajusta según el prefijo.
-c, --no-create No se crea un archivo nuevo si no existe.
-r FILE, --reference=FILE Usar el tamaño del archivo de referencia.
-o, --io-blocks Interpretar el tamaño en unidades de bloque de E/S de archivos en lugar de bytes.

Las opciones largas facilitan entender su significado y también ayudan a revisar scripts. Sin embargo, en scripts donde la portabilidad es importante, primero verifique si el sistema objetivo soporta esas opciones de extensión GNU.

Ejemplos de uso práctico

Ajustar al mismo tamaño que el archivo de referencia

El ejemplo requiere un reference.img existente. Para una prueba pequeña en un directorio nuevo, puede prepararlo con printf abc > reference.img, que genera 3 bytes. -r aplica ese tamaño al destino sin copiar abc; stat permite comprobar ambos tamaños.

truncate -r reference.img target.img
stat -c '%s %n' reference.img target.img

Restringir tamaño mínimo y máximo

El prefijo de tamaño de GNU truncate puede aplicar condiciones al tamaño actual. < reduce si es mayor que el tamaño especificado, y > aumenta si es menor.

truncate -s '<100M' cache.bin
truncate -s '>1M' placeholder.bin

Comparar tamaño lógico y uso de disco

Al ampliar un archivo, el sistema de archivos puede representar la nueva zona mediante huecos sin asignar todos los bloques. Compare el tamaño lógico de stat con la asignación indicada por du. La representación física depende del sistema de archivos; esta prueba no garantiza que una copia posterior conserve los huecos.

truncate -s 1G sparse.img
stat -c 'size=%s blocks=%b' sparse.img
du -h sparse.img

Comparación de comandos relacionados con truncate

Comando / método Rol principal Situaciones adecuadas
truncate Cambiar la posición del final del archivo y el tamaño lógico Al ajustar el tamaño rápidamente o crear archivos dispersos
touch Crear archivos vacíos o cambiar la marca de tiempo Mantener el contenido y el tamaño existente
dd Escribir o copiar bloques de datos reales Al llenar contenido o clonar datos del dispositivo
Herramienta de rotación de registros Gestión de registro: almacenamiento, compresión y reapertura Al organizar los registros de servicio operativo

Precauciones al usar

Si se reduce el tamaño, se perderán datos

El final de un archivo cortado no se puede restaurar con comandos normales. Para archivos importantes, haga una copia antes de trabajar.

Aumentar el tamaño del archivo no convierte el archivo en un formato válido

Aumentar el tamaño de imágenes o archivos del sistema de archivos no expande automáticamente su estructura interna. Se necesitan herramientas específicas para el formato correspondiente.

Verificar el método de copia de archivos dispersos

Si la herramienta de copia y el sistema de archivos de destino no preservan las áreas dispersas, el uso real del disco puede aumentar significativamente.

FAQ

¿El comando truncate -s 0 elimina el archivo?

No. Los elementos del archivo y los permisos permanecen, y solo la longitud del contenido se convierte en 0 bytes.

Si se hace un archivo grande, ¿se utiliza inmediatamente ese espacio en disco?

Si la zona aumentada se crea como una zona dispersa, el espacio asignado real puede ser menor que el tamaño lógico. Verifique con du y stat.

¿Cómo puedo evitar crear un archivo que no existe?

Se utiliza truncate -c -s TAMAÑO ARCHIVO.

¿Se copia también el contenido del archivo de referencia?

No. -r solo utiliza el tamaño del archivo de referencia y no copia el contenido.

Documentación oficial