El comando Touch en Linux se utiliza para cambiar las marcas de tiempo de los archivos, sin embargo, uno de los usos más comunes del comando Touch incluye la creación de un nuevo archivo vacío.
Con el comando touch, puedes cambiar el acceso, modificar y cambiar la hora de los archivos y carpetas en Linux. Puedes actualizar las marcas de tiempo o modificarlas a una fecha en el pasado.
La sintaxis del comando touch es bastante simple:
touch [opción] archivo
¿Qué son las marcas de tiempo de los archivos en Linux, de nuevo?
He escrito sobre las marcas de tiempo en Linux en detalle en un artículo anterior. Te recomiendo su lectura para una mejor y más clara comprensión. Para recordarlo rápidamente, enumeraré las marcas de tiempo aquí:
- hora de acceso – última vez que se accedió a un archivo
- hora de modificación – última vez que se modificó un archivo
- hora de cambio – última vez que se cambiaron los metadatos del archivo (permiso del archivo, propiedad, etc.)
Puedes ver las marcas de tiempo de un archivo usando el comando stat de la siguiente manera:
stat file.txt
Fichero: file.txt
Tamaño: 608680744 Bloques: 1188840 Bloque E/S: 4096 fichero regular
Dispositivo: fc05h/64517d Nodo-i: 659682 Enlaces: 1
Acceso: (0664/-rw-rw-r--) Uid: ( 1000/team) Gid: ( 1000/t)
Acceso: 2022-02-21 09:37:02.670960551 -0600
Modificación: 2022-02-21 09:37:02.642968862 -0600
Cambio: 2022-02-21 09:37:12.963817091 -0600
Creación: -
El comando Stat muestra incluso el número del Nodo-i del archivo.
9 ejemplos prácticos del comando touch en Linux
Ahora vamos a ver cómo utilizar el comando touch con algunos ejemplos sencillos pero útiles.
1. Crear un archivo vacío
Como mencioné anteriormente, este es el uso más común del comando touch. Todo lo que tienes que hacer es usar touch con el nombre del archivo.
touch <nombre_del_archivo>
Esto creará un archivo vacío si el archivo no existe.
touch archivo_vacio
ls -l archivo_vacio
-rw-r--r-- 1 team itsfoss 0 Sep 2 14:37 archivo_vacio
¿Pero qué pasa si el archivo ya existe? En ese caso, actualizará las tres marcas de tiempo del archivo a la hora actual.
2. Crear varios archivos vacíos
También puede utilizar touch para crear más de un archivo vacío. Sólo tiene que indicar los nombres de los archivos que desea crear.
touch <archivo1> <archivo2> <archivo3>
Si crees que es agotador escribir todos los nombres de archivo, puedes autogenerar los nombres de archivo de esta manera:
touch nuevo-archivo-{1..10}.txt
Esto creará nuevo-archivo-1.txt, nuevo-archivo-2.txt hasta nuevo-archivo-10.txt.
3. Evita crear un archivo con touch si no existe
Touch actualizará las marcas de tiempo del archivo de entrada si existe y creará un archivo vacío si el archivo de entrada no existe.
¿Pero qué pasa si no quiere que touch cree un nuevo archivo vacío? Usted quiere que actualice las marcas de tiempo del archivo, pero si el archivo no existe, no debe ser creado.
Puede utilizar el comando touch con la opción -c en estos casos:
touch -c <nombre_del_archivo>
4. Cambiar todas las marcas de tiempo de un archivo
Si usas touch en un archivo existente, cambiará el acceso, la modificación y el cambio de hora de ese archivo.
Por ejemplo, tengo este archivo llamado sherlock.txt con las siguientes marcas de tiempo:
stat sherlock.txt
Fichero: sherlock.txt
Tamaño: 356 Bloques: 8 Bloque E/S: 4096 fichero regular
Dispositivo: 10305h/66309d Nodo: 11928277 Enlace: 1
Acceso: (0777/-rwxrwxrwx) Uid: ( 1000/team) Gid: ( 1000/team)
Acceso: 2022-01-27 09:44:56.092937000 +0530
Modificación: 2022-01-27 09:41:05.028309000 +0530
Cambio: 2022-01-27 09:44:56.096937182 +0530
Si utilizo touch en este comando, todas las marcas de tiempo se cambiarán a las marcas de tiempo actuales.
stat sherlock.txt
Fichero: sherlock.txt
Tamaño: 356 Bloques: 8 Bloque E/S: 4096 fichero regular
Dispositivo: 10305h/66309d Nodo: 11928277 Enlace: 1
Acceso: (0777/-rwxrwxrwx) Uid: ( 1000/team) Gid: ( 1000/team)
Acceso: 2022-02-27 15:22:47.017037942 +0530
Modificación: 2022-02-27 15:22:47.017037942 +0530
Cambio: 2022-02-27 15:22:47.017037942 +0530
Creación: -
5. Actualizar sólo el tiempo de acceso del archivo
No siempre querrás cambiar todas las marcas de tiempo de un archivo. Si sólo quieres cambiar la hora de acceso de un archivo, puedes utilizar la opción -a con touch.
touch -a sherlock.txt
stat sherlock.txt
Fichero: sherlock.txt
Tamaño: 356 Bloques: 8 Bloque E/S: 4096 fichero regular
Dispositivo: 10305h/66309d Nodo: 11928277 Enlace: 1
Acceso: (0777/-rwxrwxrwx) Uid: ( 1000/team) Gid: ( 1000/team)
Acceso: 2022-02-27 15:22:47.017037942 +0530
Modificación: 2022-02-27 16:22:47.017037942 +0530
Cambio: 2022-02-27 15:22:47.017037942 +0530
Creación: -
6. Actualizar sólo la hora de modificación de un archivo
Si sólo deseas actualizar la hora de modificación de un archivo a la marca de tiempo actual, utiliza la opción -m del comando touch.
touch -m sherlock.txt
stat sherlock.txt
Fichero: sherlock.txt
Tamaño: 356 Bloques: 8 Bloque E/S: 4096 fichero regular
Dispositivo: 10305h/66309d Nodo: 11928277 Enlace: 1
Acceso: (0777/-rwxrwxrwx) Uid: ( 1000/team) Gid: ( 1000/team)
Acceso: 2022-02-27 15:22:47.017037942 +0530
Modificación: 2022-02-27 16:26:47.017037942 +0530
Cambio: 2022-02-27 16:26:47.017037942 +0530
Creación: -
7. Utilizar las marcas de tiempo de otro archivo
También puedes utilizar las marcas de tiempo de otro archivo como referencia con la opción -r de la siguiente manera:
touch -r <fichero_fuente> <fichero_destino>
Esto establecerá la hora de acceso y modificación del archivo de destino igual que la hora de acceso y modificación del archivo de origen.
8. Establecer la hora de acceso y modificación específica
Puede que hayas notado que en casi todos los casos (excepto en el del archivo de referencia), las marcas de tiempo se cambian a la marca de tiempo actual.
Pero no estás obligado a ello. Touch te permite establecer la hora de acceso y modificación a una fecha pasada o futura. Puedes utilizar la opción -t y una marca de tiempo con el siguiente formato:
[[CC]YY]MMDDhhmm[.ss]
- CC – Los dos primeros dígitos de un año
- YY – Los dos segundos dígitos de un año
- MM – Mes del año (01-12)
- DD – Día del mes (01-31)
- hh – Hora del día (00-23)
- mm – Minuto de la hora (00-59)
- ss – Segundos (00-59)
En el caso anterior, CC es opcional. De hecho, CCYY también es opcional, tomará el año actual en ese caso. Del mismo modo, los segundos son opcionales también, por defecto es 00.
Permíteme mostrarte un ejemplo cambiando la marca de tiempo a 12021301, es decir, el 12º mes, el segundo día, la 13ª hora y el primer minuto del año actual:
touch -t 12021301 agatha.txt
stat agatha.txt
Fichero: agatha.txt
Tamaño: 457 Bloques: 8 Bloque E/S: 4096 fichero regular
Dispositivo: 10305h/66309d Nodo-i: 11928279 Enlaces: 1
Acceso: (0777/-rwxrwxrwx) Uid: ( 1000/team) Gid: ( 1000/team)
Acceso: 2018-12-02 13:01:00.000000000 +0530
Modificación: 2018-12-02 13:01:00.000000000 +0530
Cambio: 2018-09-02 15:59:47.588680901 +0530
Creacion: -
Si intentas introducir una fecha no válida, verás un error. También notarás que la hora de modificación utiliza la marca de tiempo actual, no la misma que la de acceso y modificación. Es porque es una propiedad del sistema.
9. Cambiar la marca de tiempo de un enlace simbólico
También puedes utilizar el comando touch con enlaces simbólicos. Sólo tienes que usar la opción -h cuando se trata de enlaces simbólicos. El resto permanece igual que los archivos regulares.
touch -h <enlace_simbólico>
Espero que encuentres útiles estos ejemplos de comandos touch en Linux. Si tienes alguna pregunta o sugerencia, háznoslo saber.