OVH Cloud OVH Cloud

déplacer des fichiers à partir d'une certaine date

20 réponses
Avatar
fabrice régnier
Salut la liste ;)

J'aimerai de façon élégante (pas un prog de 40 lignes) pouvoir déplacer
des fichiers d'un répertoire vers un autre en fonction de la date de
création des fichiers.

ex: déplacer tous les fichiers de toto/ crées après le 15/08/2005 vers titi/

merci

f.

10 réponses

1 2
Avatar
Jean-Louis Liagre
fabrice régnier wrote:
Salut la liste ;)

J'aimerai de façon élégante (pas un prog de 40 lignes) pouvoir déplacer
des fichiers d'un répertoire vers un autre en fonction de la date de
création des fichiers.

ex: déplacer tous les fichiers de toto/ crées après le 15/08/2005 vers
titi/

merci

f.


ref 050815
source="titi"
destination="toto"

ref=${ref}2359
touch -t $ref /tmp/$ref || exit 1
[[ ! -d "$source" ]] && { echo "$source not found" ; exit 2 ;}
[[ ! -d "$destination" ]] && { mkdir "$destination" || exit 3 ;}
find "$source" -type f -newer /tmp/$ref -exec cp {} "$destination" ;
rm $ref

Avatar
Dam
Moi, je propose ça :

touch -m 0815000005 date ; find toto -type f -newer date -exec mv {}
titi /; rm date
Avatar
Dam
Comme Jean-Louis finalement ;)
Il a été plus rapide que moi...
Avatar
Pascal Bourguignon
"Dam" writes:
Comme Jean-Louis finalement ;)
Il a été plus rapide que moi...


Ça ne sert à rien d'être plus rapide, quand on a tout faux!
Voir ma réponse directe à Fabrice.

--
__Pascal Bourguignon__ http://www.informatimago.com/

Nobody can fix the economy. Nobody can be trusted with their finger
on the button. Nobody's perfect. VOTE FOR NOBODY.

Avatar
Dam
Pourquoi aurais-je tout faux?? Explique toi au lieu de dire ça
bétement.
Chez moi en tout cas cela marche (testé).
Tu veux peut-être parler du find car effectivement j'ai mis "/;" au
lieu de ";" mais même dans ce cas, dire que c'est tout faux est
exagéré.
Avatar
Pascal Bourguignon
fabrice régnier writes:
J'aimerai de façon élégante (pas un prog de 40 lignes) pouvoir
déplacer des fichiers d'un répertoire vers un autre en fonction de la
date de création des fichiers.

ex: déplacer tous les fichiers de toto/ crées après le 15/08/2005 vers titi/


Ce n'est pas possible. (En tout cas, pas facilement).
Unix ne garde pas la date de création de ses fichiers!

man 2 stat
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last change */
^^^^^^
CHANGE, pas création!



Il faudrait modifier les programmes qui créent ces fichiers pour
qu'ils enregistrent la date de création d'une manière ou d'une autre.

Si on les modifie pour qu'ils mettent la date dans un entête du
fichier, on peut écrire dans la foulée un petit utilitaire pour la
lire:

$ pgm -create fichier
$ pgm-creation-date fichier
2005-08-24 15:47:38 fichier
alors on peut faire:
$ pgm-creation-date toto/*
| sort -r
| sed '/2005-08-15/,$d' -e 's/^([^ ]* ){2}//'
| xargs mv {} titi/



Une autre façon de faire, c'est d'ajouter la date de création dans les
noms des fichiers. Ça marche avec tous les programmes qui permettent à
l'utilisateur de spécifier le nom des fichiers:


$ pgm -create $(date '+%Y%m%d-%H%M%S')-fichier

alors il est simple de faire:

$ ls -1 toto/*
| sort -r
| sed '/2005-08-15/,$d' -e 's/^([^ ]* ){2}//'
| xargs mv {} titi/



Une autre solution serait de modifier les file systems (sources du
noyaux), pour ajouter la date de création. Mais il faut se poser la
question de la signification d'une date de création quand on copie les
fichiers. Veut-on la date de la copie ou la date de l'original? Peut
être faudrait-il garder les deux. Donc on a besoin de 16 octets de
plus dans l'inode... (deux dates sur 64-bit).



--
__Pascal Bourguignon__ http://www.informatimago.com

Nobody can fix the economy. Nobody can be trusted with their finger
on the button. Nobody's perfect. VOTE FOR NOBODY.

Avatar
Dam
Ah oui, si c'est de ça que tu parlais je suis parfaitement d'accord
avec toi...
J'ai effectivement faire le rapprochement facile en confondant la date
de création avec la date de dernière modification.

En tout cas, c'est plus sympa de donner des explications (merci
d'ailleurs) plutot que de dire simplement "bouhh pas bien", ce n'est
pas constructif.
Avatar
Jean-Louis Liagre
Pascal Bourguignon wrote:
fabrice régnier writes:

J'aimerai de façon élégante (pas un prog de 40 lignes) pouvoir
déplacer des fichiers d'un répertoire vers un autre en fonction de la
date de création des fichiers.

ex: déplacer tous les fichiers de toto/ crées après le 15/08/2005 vers titi/



Ce n'est pas possible. (En tout cas, pas facilement).
Unix ne garde pas la date de création de ses fichiers!

man 2 stat
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last change */
^^^^^^
CHANGE, pas création!


Les scripts proposés remplissent parfaitement la tâche qui leur est
demandée si les fichiers ne sont pas modifiés après leur création.

Dans ce cas le last change est bien la date de création.

C'est en effet une contrainte, mais elle ne suffit à affirmer que
c'est "tout faux".


Avatar
Pascal Bourguignon
Jean-Louis Liagre writes:

Pascal Bourguignon wrote:
fabrice régnier writes:

J'aimerai de façon élégante (pas un prog de 40 lignes) pouvoir
déplacer des fichiers d'un répertoire vers un autre en fonction de la
date de création des fichiers.

ex: déplacer tous les fichiers de toto/ crées après le 15/08/2005 vers titi/
Ce n'est pas possible. (En tout cas, pas facilement).

Unix ne garde pas la date de création de ses fichiers!
man 2 stat
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last change */
^^^^^^
CHANGE, pas création!


Les scripts proposés remplissent parfaitement la tâche qui leur est
demandée si les fichiers ne sont pas modifiés après leur création.

Dans ce cas le last change est bien la date de création.

C'est en effet une contrainte, mais elle ne suffit à affirmer que
c'est "tout faux".


Seulement s'il se passe moins d'une seconde entre la création et la
dernière modification... ;-)

--
__Pascal_Bourguignon__ _ Software patents are endangering
() ASCII ribbon against html email (o_ the computer industry all around
/ 1962:DO20I=1.100 // the world http://lpf.ai.mit.edu/
2001:my($f)=`fortune`; V_/ http://petition.eurolinux.org/



Avatar
Laurent Wacrenier
Pascal Bourguignon écrit:
Ce n'est pas possible. (En tout cas, pas facilement).
Unix ne garde pas la date de création de ses fichiers!

man 2 stat
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last change */
^^^^^^
CHANGE, pas création!



Sur FreeBSD (récent) :
st_birthtime Time when the inode was created.

Mais aucun utilitaire ne s'en sert.

1 2