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.txtLa 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.txtCon 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.txtLa 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.txtL'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.txtEsempio 6: copiare la data da un altro file con -r
$ touch -r originale.txt copia.txtIl 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 esistenteCon -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.txte le cartelle non esistono, ottieniFile o directory non esistente. Crea prima il percorso conmkdir -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
| Comando | Cosa fa |
|---|---|
touch file | Crea il file vuoto, o ne aggiorna la data |
touch a b c | Crea o aggiorna più file |
touch bozza{1..3}.txt | Crea una serie di file numerati |
touch -c file | Aggiorna solo se il file esiste |
touch -d "data" file | Imposta una data specifica |
touch -r rif file | Copia la data da un altro file |
Nel prossimo articolo: cp, il comando per copiare file e directory.