Linux / Comando touch: crear archivos y cambiar sus marcas de tiempo

touch es un comando que crea un archivo vacío si no existe, y si el archivo existe, actualiza la hora de acceso y la hora de modificación. Permite ajustar solo la marca de tiempo sin cambiar el contenido del archivo, y se utiliza con frecuencia en la creación de archivos de prueba, tareas de compilación y scripts de automatización.

En este artículo, se explica la forma básica de uso de touch de GNU Coreutils, la selección de atime y mtime, la especificación de la fecha deseada, la copia del tiempo de un archivo de referencia y el manejo de enlaces simbólicos.

¿Qué es el comando touch?

touch establece por defecto la hora de acceso (access time) y la hora de modificación del contenido (modification time) del archivo especificado a la hora actual. Si el archivo no existe, crea un archivo normal de 0 bytes, pero usando -c no se crea un archivo nuevo. No es un comando para establecer directamente ctime o la hora de creación del archivo (Birth time) a un valor deseado.

Sintaxis básica

touch [OPCIONES] ARCHIVO...

Use comillas en rutas con espacios y -- antes de nombres que puedan empezar por guion. Ejecute los ejemplos en un directorio de práctica nuevo. Para comparar el antes y el después, cree previamente notes.txt y reference.txt con contenido de prueba; touch -r requiere que exista el archivo de referencia. Consulte touch --help y man touch para verificar las opciones disponibles.

Uso básico de touch

Crear un archivo vacío

Si se especifica una ruta que no existe, se crea un archivo vacío. También se pueden crear varios archivos a la vez.

touch memo.txt
touch file1.txt file2.txt file3.txt
touch "annual report.txt"

Actualizar la hora actual de un archivo existente

Si el archivo ya existe, su contenido y tamaño se mantienen, y las fechas de acceso y modificación se actualizan a la hora actual. Los valores antes y después se pueden verificar con stat.

stat notes.txt
touch notes.txt
stat notes.txt

No crear si el archivo no existe

Si solo desea actualizar la hora del archivo existente, utilice -c o --no-create. No se creará un archivo nuevo incluso si no existe el objetivo, y generalmente no se mostrará ningún mensaje de error.

touch -c existing.txt

Verificar el resultado de la ejecución

touch generalmente no muestra nada en la pantalla incluso si tiene éxito. Para verificar si el tamaño del archivo recién creado es de 0 bytes, consulte de la siguiente manera:

touch empty-demo.txt
stat -c '%s %n' empty-demo.txt

Ejemplo de salida:

0 empty-demo.txt

Si ejecuta el mismo comando en un archivo existente, su tamaño y contenido permanecen iguales, y solo se pueden actualizar las fechas de acceso y modificación. Puede verificar la diferencia con stat -c '%x %y'.

Opciones principales

Opciones Descripción
-a Solo se cambia la fecha de acceso.
-m Solo se cambia la fecha de modificación del contenido.
-c, --no-create No se crea un archivo nuevo aunque el archivo de destino no exista.
-d STRING Interpreta cadenas de fecha legibles por humanos para establecer la hora.
-t STAMP Especifica la hora en el formato [[CC]YY]MMDDhhmm[.ss].
-r FILE Copia la hora de acceso y modificación del archivo de referencia.
-h, --no-dereference En los sistemas posibles, cambia la hora del enlace simbólico en sí, no del objetivo del enlace.
--time=WORD Selecciona la hora a cambiar, como access o modify.

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

Cambiar la hora de acceso y la hora de modificación por separado

-a cambia solo atime, -m cambia solo mtime. Usar ambas opciones cambia ambas horas como acción predeterminada.

touch -a access-log.txt
touch -m generated.css

Especificar la fecha y hora deseadas

-d interpreta cadenas de fecha. El primer ejemplo indica explícitamente UTC+09:00; -t interpreta la fecha en la zona horaria local o en la indicada por TZ. Por tanto, las dos órdenes siguientes fijan el mismo instante solo si la segunda se ejecuta en UTC+09:00 para esa fecha. Use una zona explícita cuando necesite reproducir un instante en distintos equipos.

touch -d '2026-09-23 14:30:00 +0900' report.txt
touch -t 202609231430.00 report.txt

Copiar la marca de tiempo del archivo de referencia

Con -r se pueden aplicar atime y mtime del archivo de referencia a otros archivos. Después de copiarlos, verifique el resultado con stat.

touch -r reference.txt target.txt
stat reference.txt target.txt

Comparación con comandos relacionados de touch

Comando / método Rol principal Situaciones adecuadas
touch Crear un archivo vacío o cambiar atime·mtime Cuando se prepara un archivo o tiempo sin escribir contenido
truncate Especificar o ajustar el tamaño del archivo Cuando se necesita un archivo de 0 bytes o un archivo de un tamaño específico
date Mostrar y convertir la hora actual y gestión del tiempo del sistema Cuando se necesita calcular fechas o convertir formatos
stat Consultar metadatos de archivos Cuando se desea verificar la marca de tiempo antes y después de un cambio

Precauciones al usar

touch no vacía el contenido

Incluso al ejecutar touch en un archivo existente, se mantiene el contenido del archivo. Para reducir un archivo a 0 bytes, debe usar truncate -s 0 o una redirección adecuada.

ctime y la fecha de creación no se pueden especificar directamente

Cuando el estado del inodo de un archivo cambia, el kernel actualiza el ctime. No suponga que puede establecer ctime o Birth time en un valor arbitrario usando touch.

No manipule el tiempo para alterar las decisiones de recompilación

Es útil al forzar la reconstrucción en herramientas de compilación basadas en marcas de tiempo, pero si se usa para ocultar problemas de dependencia, pueden ocurrir resultados difíciles de reproducir.

FAQ

¿Se elimina el contenido del archivo con touch?

No. El contenido y el tamaño del archivo existente se mantienen y solo se cambia la marca de tiempo seleccionada.

¿Qué hacer si no quiero crear un archivo cuando no existe?

Use touch -c ARCHIVO. No crea un archivo nuevo si el destino no existe.

¿Cómo cambiar solo la hora de modificación?

Se utiliza touch -m ARCHIVO. Si solo desea cambiar la hora de acceso, use -a.

¿Se puede sincronizar con la hora de otro archivo?

Usando touch -r REFERENCIA DESTINO, puede copiar la hora de acceso y modificación del archivo de referencia.

Para comparar otras operaciones sobre archivos, consulte la Lista de comandos de uso frecuente en Linux. La sintaxis de fechas y las opciones están descritas en la Documentación oficial de GNU Coreutils touch y en el Manual oficial de GNU Coreutils.