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.




