Salta al contenuto principale

touch: crea file vuoti e aggiorna le date

Inviato da tuxsa il

touch crea un file vuoto se non esiste, oppure ne aggiorna la data di modifica se esiste già. Dopo mkdir, che crea le cartelle, touch è il modo più rapido per creare i file: un nome di comando curioso per un'operazione molto semplice.

Cos'è

touch in inglese significa "toccare": il comando "tocca" un file, cioè lo segna come appena usato. Fa parte del pacchetto GNU coreutils ed è un eseguibile (/usr/bin/touch), presente su qualsiasi distribuzione GNU/Linux.

Cosa fa

Ha due comportamenti, a seconda che il file esista o no:

  • Il file non esiste: lo crea, vuoto (0 byte).
  • Il file esiste: non tocca il contenuto, ma aggiorna la data di ultimo accesso e quella di ultima modifica all'ora attuale.

Ogni file ha in realtà tre date: accesso (atime), modifica del contenuto (mtime) e modifica dei metadati (ctime). touch può impostare le prime due; la terza viene sempre aggiornata dal sistema e non è modificabile a mano.

Come si usa

Sintassi base:

$ touch [opzioni] file...

Esempio 1: creare un file vuoto

$ touch appunti.txt
$ ls -l appunti.txt
-rw-r--r-- 1 enzo enzo 0 ott  4 11:20 appunti.txt

La dimensione è zero byte: il file esiste ma non contiene nulla.

Esempio 2: creare più file insieme

$ touch bozza1.txt bozza2.txt bozza3.txt
$ ls
bozza1.txt  bozza2.txt  bozza3.txt

Con le parentesi graffe della shell il comando si accorcia:

$ touch bozza{1..3}.txt
$ touch articolo.{html,css,js}

Esempio 3: aggiornare la data di un file esistente

$ ls -l relazione.txt
-rw-r--r-- 1 enzo enzo 812 set  1 09:00 relazione.txt
$ touch relazione.txt
$ ls -l relazione.txt
-rw-r--r-- 1 enzo enzo 812 ott  4 11:25 relazione.txt

La dimensione resta 812 byte e il contenuto è intatto: è cambiata solo la data.

Esempio 4: impostare una data precisa con -d

$ touch -d "2026-01-15 09:30" vecchio.txt
$ ls -l vecchio.txt
-rw-r--r-- 1 enzo enzo 0 gen 15 09:30 vecchio.txt

L'opzione -d accetta anche espressioni come "yesterday" o "2 days ago".

Esempio 5: usare il formato -t

Con -t la data si scrive nel formato AAAAMMGGhhmm:

$ touch -t 202601150930 vecchio.txt

Esempio 6: copiare la data da un altro file con -r

$ touch -r originale.txt copia.txt

Il file copia.txt avrà le stesse date di originale.txt.

Esempio 7: non creare il file se non esiste con -c

$ touch -c inesistente.txt
$ ls inesistente.txt
ls: impossibile accedere a 'inesistente.txt': File o directory non esistente

Con -c il comando aggiorna le date dei file che esistono e ignora in silenzio gli altri.

Esempio 8: un file "segnaposto" negli script

Un uso classico è marcare il momento di un'operazione e poi cercare i file modificati dopo:

#!/bin/bash
MARCATORE="$HOME/.ultimo_backup"

# file modificati dopo l'ultimo backup
if [ -f "$MARCATORE" ]; then
    find "$HOME/Documenti" -type f -newer "$MARCATORE"
fi

# ... qui esegui il backup ...

# aggiorna il marcatore
touch "$MARCATORE"

Opzioni utili

  • -a: aggiorna solo la data di accesso.
  • -m: aggiorna solo la data di modifica.
  • -c: non crea il file se non esiste.
  • -d "data": imposta la data indicata a parole.
  • -t AAAAMMGGhhmm: imposta la data in formato numerico.
  • -r file: copia le date da un altro file.

Attenzione a

  • Non crea le directory: se scrivi touch cartella/nuova/file.txt e le cartelle non esistono, ottieni File o directory non esistente. Crea prima il percorso con mkdir -p.
  • Non cancella nulla: su un file già esistente cambia solo le date, mai il contenuto. A differenza di > file, che invece svuota il file.
  • Permessi: per creare un file serve il permesso di scrittura nella directory; per aggiornare le date di un file esistente devi esserne il proprietario o avere il permesso di scrittura su di esso.
  • Nomi con spazi: usa le virgolette, altrimenti crei un file per ogni parola.
  • Date nel passato: cambiare le date a mano può confondere strumenti come i backup incrementali o make, che si basano su di esse per decidere cosa è cambiato.

Riepilogo

ComandoCosa fa
touch fileCrea il file vuoto, o ne aggiorna la data
touch a b cCrea o aggiorna più file
touch bozza{1..3}.txtCrea una serie di file numerati
touch -c fileAggiorna solo se il file esiste
touch -d "data" fileImposta una data specifica
touch -r rif fileCopia la data da un altro file

Nel prossimo articolo: cp, il comando per copiare file e directory.