Linux / Comando / touch / Creazione di file vuoti e modifica dell'ultima data di modifica

In Linux, touch crea un file vuoto se non esiste e, se il file esiste, aggiorna i tempi di accesso e modifica all'ora corrente per impostazione predefinita. Non cancella il contenuto dei file esistenti, ma può influire su backup o operazioni di compilazione che dipendono dalle informazioni temporali.

Creazione di file vuoti

Il seguente comando crea un file vuoto nella directory corrente se example.txt non esiste. Gli esempi successivi si basano su touch e stat da GNU coreutils. Eseguili in una directory di prova vuota separata per evitare di influenzare i dati esistenti.

touch example.txt
ls -l example.txt

Un file di dimensione 0 apparirà nell'elenco. Se un file con lo stesso nome esiste già, non viene sovrascritto con un nuovo file vuoto, ma viene aggiornato il tempo del file esistente. Se il nome contiene spazi, racchiudilo tra virgolette come touch "my notes.txt". Se vengono elencati più nomi separati da spazi, ciascuno verrà elaborato.

Verifica e aggiornamento del tempo di un file esistente

Il tempo di accesso (atime) di un file si riferisce all'ultimo accesso, e il tempo di modifica (mtime) si riferisce all'ultima modifica del contenuto del file. Per impostazione predefinita, touch example.txt imposta entrambi i tempi all'ora corrente. Puoi controllare prima e dopo la modifica come segue.

stat example.txt
touch example.txt
stat example.txt

Confronta le voci Access e Modify nell'output di stat. La lingua effettiva dell'output e il formato di visualizzazione possono variare a seconda dell'ambiente, e le differenze a intervalli molto brevi potrebbero non essere visibili a causa della risoluzione temporale del file system.

Il tempo di modifica dello stato (ctime) è collegato a modifiche nei metadati come i permessi e non è lo stesso del tempo di creazione. Modificare le informazioni temporali con touch può anche aggiornare il ctime, ma non è possibile impostare il ctime a un valore arbitrario o modificare il tempo di creazione. Il fatto che il tempo di accesso venga aggiornato ad ogni lettura dipende anche dal file system e dalle impostazioni di mount. Puoi controllare il significato di ogni tempo in Descrizione dei tempi dei file di GNU.

Modifica solo del tempo di accesso o del tempo di modifica

-a seleziona solo il tempo di accesso, e -m seleziona solo il tempo di modifica. Qui sotto è riportato un esempio di modifica del tempo di modifica di un file di prova all'ora corrente e di controllo del risultato.

touch -m example.txt
stat example.txt

-a seleziona l'orario di accesso, mentre -m seleziona l'orario di modifica. Non significa che il tempo di cambiamento dello stato del file sarà preservato. Se il file non esiste, viene creato un file vuoto a meno che non sia specificata un'opzione separata.

Usare un orario desiderato o l'orario di un altro file

È possibile specificare la data e l'ora con GNU touch -d. L'esempio seguente imposta gli orari di accesso e modifica del file di prova all'orario specificato.

touch -d '2024-01-15 10:30:00' example.txt
stat example.txt

Se non si specifica il fuso orario, la data e l’ora vengono interpretate secondo la variabile d'ambiente TZ o il fuso orario del sistema. Verifica che i tempi di accesso e di modifica dell'output corrispondano ai valori specificati. I valori salvati possono variare a seconda dell'intervallo e della risoluzione supportati dal file system.

Per utilizzare un altro file come riferimento, usa -r. Il seguente è un esempio quando sia reference.txt che example.txt esistono nella directory corrente.

touch -r reference.txt example.txt
stat reference.txt example.txt

Imposta i tempi di accesso e di modifica del file di destinazione ai valori del file di riferimento. Se il file di riferimento non esiste, si verifica un errore e, per impostazione predefinita, può essere creato un file vuoto se il file di destinazione non esiste. Per opzioni dettagliate, consulta il manuale GNU di touch.

Aggiorna solo l'orario senza creare un file

-c non crea un nuovo file se il file specificato non esiste. Il comando seguente aggiorna l'orario all'ora corrente se il file esiste già e non lo crea se non esiste.

touch -c example.txt

Poiché può terminare senza errori anche quando il file non esiste, non usare solo lo stato di successo di questo comando per verificare l'esistenza del file. Per creare un nuovo file, è necessario il permesso di scrittura per la directory genitore e il permesso di modificare l'orario di un file esistente dipende dal proprietario e dall'orario che si desidera impostare. Se si verifica un errore, controllare il percorso e i permessi.