Linux / Commande touch : créer un fichier et régler ses horodatages
La commande GNU touch crée un fichier vide si son chemin n’existe pas ; si le fichier existe, elle règle par défaut ses heures de dernier accès (atime) et de modification du contenu (mtime) sur l’heure actuelle sans effacer son contenu. Les options -a, -m, -d et -r permettent de choisir l’horodatage à modifier ou la valeur à reprendre.
Les exercices ci-dessous agissent seulement sur des fichiers créés dans un nouveau dossier de pratique. Le manuel officiel GNU Coreutils pour touch précise les exceptions liées aux liens symboliques et aux systèmes de fichiers ; vérifiez aussi touch --help ou man touch sur votre machine.
Que change touch sur un fichier existant ?
Un fichier ordinaire possède plusieurs dates qui ne décrivent pas la même chose. atime indique son dernier accès, mtime la dernière modification de son contenu et ctime la dernière modification de son état ou de ses métadonnées, selon les règles du système de fichiers. touch règle atime et mtime par défaut. Il ne permet pas de donner arbitrairement une valeur à ctime ou à la date de création (birth time), si cette dernière est disponible.
Modifier l’horodatage peut également amener le système à mettre à jour ctime. La résolution des dates et la politique d’atime varient selon le système de fichiers et ses options de montage. Pour lire des valeurs précises, utilisez stat avant et après ; ne déduisez pas un résultat d’une simple commande qui se termine sans message.
Syntaxe, création d’un fichier vide et vérification
touch [OPTION]... FICHIER...
Plusieurs chemins peuvent être indiqués ; GNU touch les traite de gauche à droite, si bien que les heures « maintenant » de deux fichiers peuvent légèrement différer. Entourez de guillemets un nom contenant des espaces et placez -- avant un nom commençant par un tiret. Un chemin qui vaut exactement - a un sens particulier dans GNU touch : préférez ./- si vous voulez vraiment un fichier nommé ainsi.
Ce bloc crée un dossier de pratique, puis un fichier vide et vérifie sa taille :
lab=$(mktemp -d "$HOME/touch-lab.XXXXXX") || exit 1
touch -- "$lab/vide.txt"
stat -c '%s octet(s) %n' "$lab/vide.txt"
test -f "$lab/vide.txt" && test ! -s "$lab/vide.txt"
stat doit afficher une taille de 0 octet et les deux tests doivent réussir. Un dossier parent manquant ou des droits insuffisants empêchent la création. Pour préparer un contenu, utilisez ensuite une écriture explicite ; touch ne remplace pas un éditeur ni une redirection d’entrée.
Garder le contenu tout en modifiant l’heure
Sur un fichier existant, touch ne vide pas son contenu. L’option -m ne demande que la modification de mtime, tandis que -a ne demande que celle d’atime. Le bloc suivant écrit d’abord un contenu connu, choisit une date UTC explicite pour mtime, puis vérifie le contenu et l’horodatage :
printf 'contenu conservé\n' > "$lab/note.txt"
touch -m -d '2026-09-23 05:30:00 UTC' -- "$lab/note.txt"
cat -- "$lab/note.txt"
stat -c '%y %s octet(s)' "$lab/note.txt"
Le texte reste « contenu conservé ». La date affichée par stat est convertie dans le fuseau utilisé par votre système ; elle peut donc ne pas afficher littéralement 05:30. Pour vérifier le même instant indépendamment du fuseau local, définissez TZ=UTC pour la commande de lecture ou comparez l’époque Unix avec stat -c %Y. Certaines plateformes arrondissent les fractions de seconde ; n’exigez pas une précision supérieure à celle du système de fichiers.
-a fonctionne de la même façon pour l’heure d’accès. Toutefois, une lecture avec cat, un indexeur ou la politique de montage peut elle-même modifier ou retarder l’observation d’atime. Pour examiner cet attribut, relevez stat -c '%x %y %z' avant et après une opération contrôlée et interprétez le résultat avec la configuration du système.
Choisir une date, recopier une référence et éviter une création
| Option GNU | Effet | Point à contrôler |
|---|---|---|
-a |
Demande de modifier seulement atime. | La lecture d’un fichier peut influencer l’atime observé. |
-m |
Demande de modifier seulement mtime. | Le contenu du fichier reste inchangé. |
-c, --no-create |
Ne crée pas un chemin absent et ne le signale pas comme une erreur. | Vérifiez séparément l’existence si elle compte pour le script. |
-d DATE |
Interprète une date et une heure lisibles. | Précisez le fuseau ou utilisez UTC pour éviter une ambiguïté. |
-t HORODATAGE |
Accepte le format [[CC]YY]MMDDhhmm[.ss]. |
Les champs omis et le fuseau local changent l’interprétation. |
-r RÉFÉRENCE |
Reprend atime et mtime d’un autre fichier. | Inspectez le fichier de référence et sa stabilité. |
-h, --no-dereference |
Tente de modifier les dates du lien symbolique lui-même. | La prise en charge dépend du système ; cette option ne crée pas de fichier absent. |
Pour une automatisation, préférez une date sans ambiguïté telle que 2026-09-23T05:30:00Z. Une expression relative comme « yesterday » est une extension GNU dont le résultat dépend du moment et du fuseau d’exécution. Avec -t, l’année et les secondes peuvent être omises, mais cette commodité augmente le risque de lire la mauvaise date ; indiquez les champs nécessaires et vérifiez avec stat.
Le bloc suivant reprend l’horodatage de note.txt pour un fichier de pratique distinct, puis vérifie mtime avec une valeur numérique. Il vérifie aussi que -c ne crée pas un fichier absent :
touch -- "$lab/cible.txt"
touch -r "$lab/note.txt" -- "$lab/cible.txt"
stat -c '%Y %n' "$lab/note.txt" "$lab/cible.txt"
touch -c -- "$lab/inexistant.txt"
test ! -e "$lab/inexistant.txt" && printf 'Aucun nouveau fichier\n'
Les deux nombres %Y doivent être égaux, et le dernier message confirme l’absence du nouveau fichier. -r reprend également atime par défaut, mais la lecture de la référence peut modifier son atime selon l’environnement ; contrôlez les deux valeurs lorsque cette précision importe. -c ne signifie pas qu’un fichier attendu existe : si son absence doit être une erreur métier, testez-la explicitement.
Liens symboliques, permissions et limites des horodatages
Sans -h, touch suit normalement un lien symbolique pour agir sur sa cible. Avec -h, GNU touch essaie de modifier le lien lui-même, si le système le permet ; il ne crée pas de fichier absent dans ce mode. La commande ln explique la différence entre le lien et sa cible. Avant un script sur des liens, lisez la chaîne avec readlink, confirmez la cible et testez la prise en charge de -h sur le système cible.
Les droits nécessaires diffèrent selon que vous demandez « maintenant » ou une date choisie. Le manuel GNU indique que fixer l’heure actuelle peut être permis à un utilisateur qui a seulement l’écriture sur le fichier, tandis qu’une autre valeur demande normalement d’en être propriétaire. Un système plus ancien peut imposer des contraintes supplémentaires. N’utilisez pas sudo pour masquer un problème de chemin ; vérifiez propriétaire et permissions avec stat.
touch peut servir à déclencher un outil de construction qui compare des mtime, mais changer une date ne répare pas une dépendance mal déclarée. Pour créer un fichier de taille précise ou vider un fichier existant, utilisez un outil adapté comme truncate après avoir vérifié le contenu à conserver. Pour connaître simplement la date, date et stat évitent de modifier le fichier.
Questions fréquentes
touch efface-t-il le contenu d’un fichier existant ?
Non. Il change les horodatages choisis et conserve le contenu et la taille du fichier existant.
Comment modifier seulement l’heure de modification ?
Utilisez touch -m FICHIER. L’option -a sélectionne l’heure d’accès.
Comment éviter de créer un fichier absent ?
Ajoutez -c ou --no-create, puis testez séparément l’existence si elle est nécessaire pour la suite.
touch peut-il définir ctime ou la date de création ?
Non. Il peut demander une valeur pour atime et mtime ; ctime est géré par le système lors des changements d’état, et la date de création n’est pas réglée par touch.
La référence des commandes Linux par tâche situe touch parmi les outils de fichiers.




