Comando touch in Linux: creare file e modificare atime e mtime

touch crea un file vuoto se il nome non esiste e, per un file esistente, aggiorna i tempi di accesso e modifica senza svuotarne il contenuto. Puoi scegliere quale tempo cambiare, assegnare una data oppure copiare i tempi da un file di riferimento.

Gli esempi descrivono GNU Coreutils. Controlla touch --help e man touch per l’implementazione installata. Esegui le prove nella nuova cartella locale preparata più avanti, così i comandi non modificano i tempi di documenti di lavoro.

Cos'è il comando touch?

Per impostazione predefinita, touch porta al momento corrente atime (access time, tempo di accesso) e mtime (modification time, tempo di modifica del contenuto). Se il nome non esiste crea un normale file di zero byte, salvo opzioni come -c. ctime indica il tempo di cambiamento dello stato del file, non la creazione; il tempo di creazione, quando disponibile, è chiamato birth time. Non puoi assegnare liberamente questi ultimi due con touch.

Sintassi di base

touch [OPTION]... FILE...

[OPTION]... e FILE... sono segnaposto per le opzioni e uno o più nomi. Metti tra virgolette i percorsi con spazi. Per esempio, touch -- -nome.txt tratta -nome.txt come un nome. La directory precedente deve esistere: touch non crea le directory mancanti.

Uso base del comando touch

Creare un file vuoto

Da una directory scrivibile, esegui il blocco seguente in Bash. Crea una nuova cartella touch-demo e vi entra; se la cartella esiste già si arresta. Nella cartella vengono creati cinque file vuoti, compreso annual report.txt, senza richiedere privilegi amministrativi. Gli esempi successivi si riferiscono a questa cartella di prova.

mkdir touch-demo || exit 1
cd touch-demo || exit 1
touch notes.txt
touch file1.txt file2.txt file3.txt
touch "annual report.txt"

Aggiornare i timestamp all'orario corrente

Se notes.txt esiste, il contenuto e la dimensione rimangono invariati; cambiano i tempi selezionati. Con stat puoi confrontare i campi Access e Modify prima e dopo. I valori dipendono dall’orologio e dalla precisione del file system; due operazioni molto ravvicinate possono mostrare lo stesso valore.

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

Non creare file mancanti

Usa -c, o --no-create, per evitare la creazione. Se existing.txt manca, il comando seguente non lo crea, non segnala questa assenza come errore e può terminare con stato zero. Il successo non dimostra quindi che il file esista.

touch -c existing.txt

Controllo del risultato dell'esecuzione

Normalmente touch non stampa nulla quando riesce. Con il nome empty-demo.txt ancora assente nella cartella di prova, verifica il file nuovo così:

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

Esempio di output:

0 empty-demo.txt

Se il file esisteva già, touch non lo riduce a zero byte. Per confrontare i tempi usa stat -c '%x %y' empty-demo.txt: %x mostra atime e %y mtime. Controlla subito $? dopo il comando che vuoi verificare; un altro comando sostituisce quello stato.

Opzioni principali

Opzione Effetto
-a Modifica soltanto atime, il tempo di accesso.
-m Modifica soltanto mtime, il tempo di modifica del contenuto.
-c Non crea il file quando manca.
-d STRING Interpreta una data; GNU accetta anche espressioni relative e fusi orari espliciti.
-t STAMP Usa il formato [[CC]YY]MMDDhhmm[.ss] nel fuso scelto da TZ o dal sistema.
-r FILE Copia i tempi di accesso e modifica da un file di riferimento.
-h Agisce sul collegamento simbolico anziché sulla destinazione, se il sistema lo supporta. Non crea un nuovo file.
--time=WORD Seleziona il tempo: access, atime o use equivalgono a -a; modify o mtime equivalgono a -m.

Le opzioni lunghe e l’interpretazione libera delle date qui descritte sono funzionalità GNU. POSIX.1-2024 include anche -d, ma con un formato più ristretto, per esempio 2026-09-23T05:30:00Z; non presumere che espressioni come “yesterday” siano portabili.

Esempi pratici

Cambiare separatamente atime e mtime

Il blocco assegna prima a entrambi i file un riferimento temporale fisso, poi usa -a su access-log.txt e -m su generated.css. Nell’output finale il primo mantiene il vecchio mtime e ha atime corrente; il secondo mantiene il vecchio atime e ha mtime corrente. -a -m seleziona entrambi i tempi. Se il file manca, le opzioni da sole non impediscono la creazione.

touch -d '2020-01-01 00:00:00 +0000' access-log.txt generated.css
touch -a access-log.txt
touch -m generated.css
stat -c '%n | %x | %y' access-log.txt generated.css

Impostare data, ora e fuso orario

La prima riga specifica le 14:30 del 23 settembre 2026 con scarto +0900, equivalenti alle 05:30 UTC. La seconda è un’alternativa che imposta lo stesso istante usando il formato numerico e TZ=UTC0, applicato soltanto a quel comando. In -t le cifre sono anno, mese, giorno, ora, minuto e, dopo il punto, secondo. Senza TZ esplicito, -t usa il fuso locale e le stesse cifre possono indicare un istante diverso. Per verificare, esegui TZ=UTC0 stat -c '%x %y' report.txt: entrambi i campi devono indicare 2026-09-23 05:30:00 con scarto +0000.

touch -d '2026-09-23 14:30:00 +0900' report.txt
TZ=UTC0 touch -t 202609230530.00 report.txt

Copiare i tempi da un file di riferimento

Nella cartella di prova, il blocco prepara reference.txt con due tempi diversi e li copia su target.txt. Le righe stampate da stat devono avere gli stessi valori per Access e Modify nei due file; la rappresentazione oraria dipende dal fuso locale. -r copia i tempi, non il contenuto: target.txt può essere creato vuoto se manca. Per copiare soltanto mtime combina -m -r.

touch -a -d '2024-01-02 03:04:05 +0000' reference.txt
touch -m -d '2025-06-07 08:09:10 +0000' reference.txt
touch -r reference.txt target.txt
stat reference.txt target.txt

Aggiornare il collegamento simbolico stesso

Normalmente touch segue un collegamento e aggiorna la destinazione. Su un sistema che lo supporta, touch -h collegamento aggiorna invece il collegamento; con -r, anche il riferimento viene letto dal collegamento stesso. GNU non crea file con -h: per non segnalare un nome assente puoi aggiungere -c. Confronta i metadati del collegamento con stat collegamento e quelli della destinazione con stat -L collegamento. Su alcuni sistemi, leggere il collegamento ne aggiorna atime, perciò mtime è più semplice da osservare.

Per creare un file serve accesso in scrittura e attraversamento alla directory; per cambiare i tempi valgono le regole di proprietà e autorizzazione del sistema. Su Linux impostare entrambi i tempi al momento corrente può essere consentito con il permesso di scrittura anche senza essere il proprietario, mentre scegliere tempi arbitrari richiede normalmente la proprietà o privilegi appropriati. Errori come accesso negato, directory assente o file system in sola lettura vanno controllati tramite diagnosi e stato di uscita. Il comando non concede permessi aggiuntivi.

Confronto con altri comandi

Comando o metodo Ruolo principale Quando usarlo
touch Creare un file vuoto o modificare atime e mtime Preparazione di file e timestamp
truncate Modificare la dimensione logica di un file Quando vuoi impostare una dimensione, accettando che una riduzione possa eliminare dati
date Visualizzare e convertire date Calcoli e formattazione delle date
stat Leggere i metadati del file Verificare le modifiche dei timestamp

Limiti ed errori da riconoscere

Non svuota un file esistente

Un file esistente conserva i dati. truncate -s 0, invece, li elimina riducendo la dimensione a zero: usalo soltanto quando questo è il risultato voluto. Alla fine della prova torna alla cartella iniziale con cd .. e rimuovi soltanto touch-demo dopo averne controllato il contenuto.

ctime e data di creazione sono differenti

Su Linux il kernel aggiorna ctime quando cambia lo stato del file; anche un aggiornamento di atime o mtime può quindi modificare ctime. touch non permette di impostarlo a una data scelta e non modifica il birth time. I valori e la precisione disponibili dipendono dal file system.

Le modifiche ai timestamp possono nascondere problemi di dipendenza

I sistemi di compilazione che confrontano mtime possono rifare o saltare lavori dopo un cambiamento dei tempi. Usa touch con un intento preciso e correggi le dipendenze errate invece di nasconderle cambiando le date.

Domande frequenti

touch elimina il contenuto di un file esistente?

No. Mantiene il contenuto e la dimensione mentre cambia i timestamp selezionati.

Come evito di creare un file mancante?

Usa touch -c nome. Se il nome manca, non viene creato; lo stato zero non ne dimostra l’esistenza.

Come cambiare soltanto il tempo di modifica?

Usa touch -m nome; -a cambia soltanto il tempo di accesso. Se il nome manca, aggiungi -c per impedirne la creazione.

Posso copiare i timestamp da un altro file?

Sì. touch -r riferimento destinazione copia atime e mtime. Il riferimento deve esistere ed essere accessibile; i contenuti non vengono copiati.

Documentazione di riferimento