Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Modification de la date d'un fichier

37 réponses
Avatar
lionmarron
Bonjour,

Existe-t-il une instruction qui permettrait de modifier la date de
création d'un fichier ?

Ce n'est pas précisément le sujet mais à tout hasard j'explique pour
quoi c'est faire : j'ai enregistré des mails dans un dossiers et pour
des raisons que je ne tiens pas à connaître (soyons modestes) cela
marche mais pas d'une façon très habituelle. Les noms de fichiers sont
plutôt bizarre (franchement long), et les dates de création sont
devenues la date du jour de la copie (ce qui ne m'arrange pas pour les
opérations de tri par exemple).

--
lionmarron

10 réponses

1 2 3 4
Avatar
Geo Cherchetout
Le 07/05/2013 20:36, *lionmarron* a écrit fort à propos :
Bonjour,

Existe-t-il une instruction qui permettrait de modifier la date de
création d'un fichier ?



Bonjour,
Je ne sais pas si tes fichiers ont une date de création, ça peut dépendre du
système de fichiers, mais la commande touch permet notamment de modifier
celle du dernier accès et celle de dernière modification. Man touch.
Avatar
Francois Lafont
Bonjour,

Le 07/05/2013 20:36, lionmarron a écrit :

Existe-t-il une instruction qui permettrait de modifier la date de
création d'un fichier ?



Sauf erreur de ma part, sous Linux, la date de création d'un fichier n'existe pas. Tu as la date de dernière modification (le mtime) qui correspondra à la date de création si jamais le fichier n'a jamais été modifié. Tu peux artificiellement modifier le mtime (avec le atime dans la foulée) avec la commande touch :

touch -t '200402291621.40' /tmp/f1

placera le mtime du fichier /temp/f1 au "29/02/2004 à 16:21:40".

Ce n'est pas précisément le sujet mais à tout hasard j'explique pour
quoi c'est faire : j'ai enregistré des mails dans un dossiers et pour
des raisons que je ne tiens pas à connaître (soyons modestes) cela
marche mais pas d'une façon très habituelle. Les noms de fichiers sont
plutôt bizarre (franchement long), et les dates de création sont
devenues la date du jour de la copie (ce qui ne m'arrange pas pour les
opérations de tri par exemple).



Je pense que c'est normal, la copie revient à créer un fichier et donc le mtime correspondra à la date de la copie sauf si on utilise des options qui vont bien. Par exemple avec la commande cp et l'option -a, tu préserveras le mtime (entre autres) entre la source et la destination. Mais encore une fois, la date de création d'un fichier n'est pas stockée sous Linux. Ce que tu peux voir avec « ls -l » (ou via un explorateur de fichiers), c'est le mtime qui peut coïncider avec la date de création... ou pas.

--
François Lafont
Avatar
Francois Lafont
Le 07/05/2013 20:53, Francois Lafont a écrit :

Sauf erreur de ma part, sous Linux, la date de création d'un fichier n'existe pas.



Rectification : ça ne doit pas être Linux qui est en cause dans cette histoire mais le système de fichiers utilisé. Avec ext3 et ext4, je suis presque sûr que la date de création d'un fichier n'existe pas.

Peut-être qu'il existe des systèmes de fichiers, pris en charge par Linux, et qui stockent la date de création d'un fichier. Si ça existe, je serais curieux d'avoir des exemples.


--
François Lafont
Avatar
Benoit Izac
Bonjour,

le 07/05/2013 à 20:58, Francois Lafont a écrit dans le message
<51894ec3$0$2541$ :

Sauf erreur de ma part, sous Linux, la date de création d'un fichier


n'existe pas.

Rectification : ça ne doit pas être Linux qui est en cause dans cette
histoire mais le système de fichiers utilisé. Avec ext3 et ext4, je
suis presque sûr que la date de création d'un fichier n'existe pas.



C'est bien Linux/UNIX qui est en cause, regarde la structure « stat »
dans stat(2) ou
<http://pubs.opengroup.org/onlinepubs/009696699/basedefs/sys/stat.h.html>.

--
Benoit Izac
Avatar
lionmarron
Le 07/05/2013 20:53, Francois Lafont a écrit :
Bonjour,

Le 07/05/2013 20:36, lionmarron a écrit :

Existe-t-il une instruction qui permettrait de modifier la date de
création d'un fichier ?



Sauf erreur de ma part, sous Linux, la date de création d'un fichier n'existe pas. Tu as la date de dernière modification



En fait c'est ce qu'il me semblait et, quoique je n'en étais pas sûr,
c'était ce que je voulais dire.

(le mtime) qui correspondra à la date de création si jamais le fichier n'a jamais été modifié. Tu peux artificiellement modifier le mtime (avec le atime dans la foulée) avec la commande touch :

touch -t '200402291621.40' /tmp/f1

placera le mtime du fichier /temp/f1 au "29/02/2004 à 16:21:40".



touch est bien la commande que je recherchais, donc merci pour la réponse.

Maintenant je vais essayer de faire quelque chose pour automatiser la
tache de façon à traiter tous les fichiers d'un répertoire.

Je sais pas si ce sera possible avec un fichier bash car les bonnes
dates se trouvent dans les noms de fichiers, mais je pense que je
pourrais faire script Python qui extrait les bonnes infos avant de les
mettre au bon format, et de les envoyer ligne par ligne vers un
fichiers. Jusque là pas de problème (encore que je n'ai plus utilisé
Python depuis longtemps).

Ensuite il faudrait utiliser touch et je sais pas si c'est possible
depuis un scrip Python, mais je pourrais peut-être le faire depuis un
script bash. (Et je suis pas sûr qu'un script bash puisse traiter un
fichier ligne par ligne mais ce sera sans doute une occasion d'apprendre
quelque chose.)

--
lionmarron
Avatar
Nicolas George
Francois Lafont , dans le message
<51894ec3$0$2541$, a écrit :
Rectification : ça ne doit pas être Linux qui est en cause dans cette
histoire mais le système de fichiers utilisé. Avec ext3 et ext4, je suis
presque sûr que la date de création d'un fichier n'existe pas.



Les deux sont vrais. L'API Unix ne définit pas de date de création, en
particulier ne propose aucun moyen de la consulter et/ou de la modifier. Du
coup, évidemment, les filesystems prévus pour Unix ne définissent pas de
champ pour la stocker.
Avatar
Benoit Izac
Bonjour,

le 07/05/2013 à 23:38, lionmarron a écrit dans le message
<kmbs89$htj$ :

Existe-t-il une instruction qui permettrait de modifier la date de
création d'un fichier ?



Sauf erreur de ma part, sous Linux, la date de création d'un fichier
n'existe pas. Tu as la date de dernière modification



En fait c'est ce qu'il me semblait et, quoique je n'en étais pas sûr,
c'était ce que je voulais dire.

(le mtime) qui correspondra à la date de création si jamais le
fichier n'a jamais été modifié. Tu peux artificiellement modifier le
mtime (avec le atime dans la foulée) avec la commande touch :

touch -t '200402291621.40' /tmp/f1

placera le mtime du fichier /temp/f1 au "29/02/2004 à 16:21:40".



touch est bien la commande que je recherchais, donc merci pour la réponse.

Maintenant je vais essayer de faire quelque chose pour automatiser la
tache de façon à traiter tous les fichiers d'un répertoire.

Je sais pas si ce sera possible avec un fichier bash car les bonnes
dates se trouvent dans les noms de fichiers, mais je pense que je
pourrais faire script Python qui extrait les bonnes infos avant de les
mettre au bon format, et de les envoyer ligne par ligne vers un
fichiers. Jusque là pas de problème (encore que je n'ai plus utilisé
Python depuis longtemps).

Ensuite il faudrait utiliser touch et je sais pas si c'est possible
depuis un scrip Python, mais je pourrais peut-être le faire depuis un
script bash. (Et je suis pas sûr qu'un script bash puisse traiter un
fichier ligne par ligne mais ce sera sans doute une occasion
d'apprendre quelque chose.)



Si tu crées un fichier "flist" qui contient la liste des fichiers sous
cette forme :
<nom du fichier>/<date au format [[CC]YY]MMDDhhmm[.SS]>

Il te suffit ensuite de faire (il faut être dans le bon répertoire) :
#!/bin/sh
IFS=/
while read -r FNAME FTIME; do
touch -c -t "$FTIME" "$FNAME"
done <flist

Mais si tu ne nous montres pas à quoi ressemblent tes fichiers,
difficile de t'aider plus...

--
Benoit Izac
Avatar
Benoit Izac
Bonjour,

le 08/05/2013 à 00:01, Nicolas George a écrit dans le message
<518979ca$0$14002$ :

Rectification : ça ne doit pas être Linux qui est en cause dans cette
histoire mais le système de fichiers utilisé. Avec ext3 et ext4, je suis
presque sûr que la date de création d'un fichier n'existe pas.



Les deux sont vrais. L'API Unix ne définit pas de date de création, en
particulier ne propose aucun moyen de la consulter et/ou de la modifier. Du
coup, évidemment, les filesystems prévus pour Unix ne définissent pas de
champ pour la stocker.



Ton assertion semble fausse si l'on considère ext4 comme un système de
fichier prévu pour Unix (champ crtime).

--
Benoit Izac
Avatar
Francois Lafont
Le 08/05/2013 00:01, Nicolas George a écrit :
Francois Lafont , dans le message
<51894ec3$0$2541$, a écrit :
Rectification : ça ne doit pas être Linux qui est en cause dans cette
histoire mais le système de fichiers utilisé. Avec ext3 et ext4, je suis
presque sûr que la date de création d'un fichier n'existe pas.



Les deux sont vrais. L'API Unix ne définit pas de date de création, en
particulier ne propose aucun moyen de la consulter et/ou de la modifier. Du
coup, évidemment, les filesystems prévus pour Unix ne définissent pas de
champ pour la stocker.



Merci à toi Nicolas, ainsi qu'à Benoit, pour ces précisions. J'étais un peu dans le flou sur ce point.


--
François Lafont
Avatar
Francois Lafont
Le 07/05/2013 23:38, lionmarron a écrit :

touch est bien la commande que je recherchais, donc merci pour la réponse.

Maintenant je vais essayer de faire quelque chose pour automatiser la
tache de façon à traiter tous les fichiers d'un répertoire.

Je sais pas si ce sera possible avec un fichier bash car les bonnes
dates se trouvent dans les noms de fichiers [...]



Évidemment, comme l'indique Benoît plus bas, c'est difficile d'en dire plus sans voir la tête de tes fichiers mais il y a de fortes chances pour que ce que tu veuilles faire soit parfaitement faisable (et peut-être aussi assez court à écrire) en shell avec des petits grep ou sed bien sentis.

--
François Lafont
1 2 3 4