Renommer plusieurs fichiers selon leurs noms

youhansen -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

j'ai des fichiers avec des noms sous la forme :

toto.paris.fksdjfdvbdn.01-08-2008.22-45-36.log, toto.tokyo.fcvhzegfdgdfbzeyui.02-08-2008.16-23-49.log ...

j'ai un problème de tri puisque j'ai plusieurs mois de log : par exemple, le fichier avec 01-09-2008 est affiché avant celui avec 25-08-2008 ... (01 étant inférieur à 25)

Pour avoir le bon tri, je les ai renommer de cette façon :
[2008-08-01].toto.dsfqsbtiutdfsqmjfdsqf.01-08-2008.22-45-36.log ...

mais j'ai besoin maintenant d'ajouter même l'heure en début pour avoir :

[2008-08-01].[22-45-36].toto.dsfqsbtiutdfsqmjfdsqf.01-08-2008.22-45-36.log ...

MERCI les amis. ;-)
A voir également:

5 réponses

MyTux Messages postés 222 Date d'inscription   Statut Membre Dernière intervention   44
 
Bonsoir,

Je pense qu'il te faudrait revoir la façon dont tu renommes tes fichiers, enfin c'est mon point de vue. Sinon pour répondre plus concrètement à ta question tu peux faire un truc comme cela en utilisant la commande date:

_DATE=$(date("+%d-%m-%Y "))
_HEURE=$(date("+%H:%M"))

for i in $( ls /chemin/répertoire/contenant/fichier)
do
mv $i $_DATE.$_HEURE.$i
done

normalement ca devrait marcher.
0
youhansen
 
bonsoir,

Merci MyTux. Désolé si je me suis mal exprimé.
Les fichiers ne m'appartiennent pas. Ils sont crées automatiquement et quotidiennement par d'autres programmes et je les utilise pour faire des recherches dans leurs contenus. Donc, je dois les ordonner par la date qui est incluse dans le nom: toto.xyz.jj-mm-aaaa.hh-mm-ss.log.

en utilisant un boucle FOR (de 01 à 31), j'ai pu les recopier dans mon propre répertoire en insérant la date (incluse dans le nom et non la date d'aujourd'hui) au début du nom et je veux y ajouter l'heure aussi.

Je pense que maintenant, cela est plus claire.

MERCI
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

Une idée parmi d'autres...
$ var="toto.paris.fksdjfdvbdn.01-08-2008.22-45-36.log"

$ echo "$var" | sed 's/\([^0-9-]*\)\([^.]*\).\([^.]*\).\(.*\)/[\2].[\3].\1\2.\3.\4/'

[01-08-2008].[22-45-36].toto.paris.fksdjfdvbdn.01-08-2008.22-45-36.log

$
A combiner avec une boucle et la commande "mv" ou "rename".

Regarde aussi du côté de la commande "sort", tu dois pouvoir faire un tri sur le champ de la date si toutefois le nombre de champs dans le nom des fichiers ne varie pas ;-\
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

pourquoi rennommer?!
on peut faire le tri directement sur plusieurs critéres

donc le tri se fera par date, heure, nom

voici un exemple de tri sur plusieurs critères en Perl
http://www.commentcamarche.net/forum/affich 3775140 tri des lignes d un fichier

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Tiens avec "sort" en supposant que le nombre de champs ne varie pas et en ne tenant pas compte de l'année (au cas ou il faudrait rajouter une option à la commande) :
$ ls -1
toto.paris.fksdjfdvbdn.01-08-2008.22-45-36.log
toto.paris.fksdjfdvbdn.25-08-2008.22-45-36.log
toto.tokyo.fksdjfdvbdn.05-07-2008.22-45-36.log
toto.tokyo.fksdjfdvbdn.05-08-2008.22-45-36.log

$ ls -1 | sort -n -t . -k 4.4,4.5 -k 4,4
toto.tokyo.fksdjfdvbdn.05-07-2008.22-45-36.log
toto.paris.fksdjfdvbdn.01-08-2008.22-45-36.log
toto.tokyo.fksdjfdvbdn.05-08-2008.22-45-36.log
toto.paris.fksdjfdvbdn.25-08-2008.22-45-36.log

$
;-))
0