Gestionar fitxers i directoris a Linux

La comanda touch a Linux: crear fitxers buits i canviar-ne les dates



La comanda touch fa dues coses: crear fitxers buits i canviar les dates d’accés i de modificació d’un fitxer que ja existeix, sense tocar-ne el contingut. La primera és la que més es fa servir; la segona és útil per a scripts, proves i per a eines com make o find, que decideixen què fer segons les dates dels fitxers.

Sintaxi

touch [opcions] fitxer...
  • Si el fitxer no existeix, el crea buit.
  • Si existeix, n’actualitza la data d’accés i la de modificació a l’hora actual. El contingut no canvia.

Opcions més útils

OpcióQuè fa
-aNomés canvia la data d’accés
-mNomés canvia la data de modificació
-cNo crea el fitxer si no existeix
-d dataFa servir la data indicada en lloc de l’actual ("2026-09-07 14:30", "yesterday", "2 days ago"…)
-t [[SS]AA]MMDDhhmm[.ss]Data en format compacte (202601151030 = 15 de gener de 2026 a les 10:30)
-r fitxerCopia les dates d’un altre fitxer
-hSi és un enllaç simbòlic, canvia les dates de l’enllaç i no les del fitxer on apunta

Exemples

Crear un fitxer buit:

$ touch nou.txt
$ ls -l nou.txt
-rw-rw-r-- 1 oscar oscar 0 Oct  3 17:53 nou.txt

Crear-ne uns quants de cop, amb l’expansió de claus de Bash:

$ touch fitxer{1..3}.txt
$ ls
fitxer1.txt  fitxer2.txt  fitxer3.txt  nou.txt

Posar una data concreta:

$ touch -d "2026-09-07 14:30" informe.txt
$ ls -l --time-style=long-iso informe.txt
-rw-rw-r-- 1 oscar oscar 0 2026-09-07 14:30 informe.txt

El mateix amb el format de -t:

touch -t 202601151030 vell.txt

Dates relatives (GNU touch entén expressions en anglès):

touch -d "2 days ago" prova.txt
touch -d "yesterday 08:00" prova.txt

Donar a un fitxer les mateixes dates que un altre:

touch -r informe.txt vell.txt

Actualitzar la data només si el fitxer ja existeix, sense crear-lo:

touch -c /var/run/app/estat

Les tres dates d’un fitxer

Linux guarda per a cada fitxer:

DataNomQuan canvia
AccésatimeQuan es llegeix el contingut (depèn de les opcions de muntatge, com relatime o noatime)
ModificaciómtimeQuan canvia el contingut. És la que mostra ls -l
CanvictimeQuan canvia el contingut o les metadades (permisos, propietari, nom…)

Les veus totes amb stat:

$ stat informe.txt
  File: informe.txt
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 0,32	Inode: 162172      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/   oscar)   Gid: ( 1000/   oscar)
Access: 2026-09-07 14:30:00.000000000 +0200
Modify: 2026-09-07 14:30:00.000000000 +0200
Change: 2026-10-03 17:53:40.473504789 +0200
 Birth: 2026-10-03 17:53:40.473504789 +0200

Fixa’t en una cosa: touch -d ha canviat l’accés i la modificació, però el ctime és el moment real en què hem executat touch. El ctime no es pot posar a mà: el sistema l’actualitza sempre. (Birth és la data de creació, si el sistema de fitxers la guarda.)

Usos pràctics

  • Fitxers marcador en scripts: crear /tmp/copia.ok quan acaba una còpia de seguretat i comprovar-ne l’existència o la data més tard.
  • Cercar fitxers més nous que un altre: touch -d "2026-10-01" /tmp/ref i després find . -newer /tmp/ref.
  • Forçar una recompilació amb make: touch main.c fa que es torni a compilar.

Compte amb…

  • touch no buida un fitxer que ja existeix. Si el que vols és deixar-lo a zero bytes, fes : > fitxer.log o truncate -s 0 fitxer.log.
  • Per crear un fitxer necessites permís d’escriptura al directori. Per canviar les dates d’un fitxer a l’hora actual n’has de tenir permís d’escriptura, i per posar-li una data concreta (-d, -t, -r) n’has de ser el propietari.

Comandes relacionades

  • ls: ls -lt ordena per data de modificació.
  • mkdir: crear directoris.
  • find: cercar per dates (-newer, -mtime).
  • date: formats de data i hora.