#1 Le 18/04/2019, à 04:18
- soupaloignon
[Réglé] Renomer des fichiers en utilisant des parties du nom original
Bonjour le forum,
Je dois faire des travaux sur des fichiers à l'aide de grep, mais dans un premier temps je souhaiterai classer ces fichiers (il y en a 250 environ) par ordre chronologique.
Pour le moment ils sont sous la forme : app100319.txt
Sous cette forme les 2 premiers chiffres (10) correspondent au jour, les 2 suivants (03) au mois, et les 2 derniers (19) à l'année.
J'aimerai pourvoir transformer ces noms de fichiers sous la forme appAnnéeMoisJour.txt pour obtenir un classement naturel chronologique. De cette manière les résultats du traitement avec grep seront eux aussi classé dans l'ordre chronologique.
La forme finale serait donc : app190310.txt
Par contre je ne vois pas du tout comment procéder pour y arriver, donc si vous avez des pistes, des bouts de solutions, je suis preneur
Dernière modification par soupaloignon (Le 18/04/2019, à 18:02)
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#2 Le 18/04/2019, à 06:11
- pingouinux
Re : [Réglé] Renomer des fichiers en utilisant des parties du nom original
Bonjour,
Essaye ceci, qui fait juste une simulation :
rename -n 's/(.*)(\d{2})(\d{2})(\d{2})\./$1$4$3$2./' *.txt
Si c'est bon, tu enlèves -n pour renommer réellement les fichiers.
rename 's/(.*)(\d{2})(\d{2})(\d{2})\./$1$4$3$2./' *.txt
Hors ligne
#3 Le 18/04/2019, à 06:21
- soupaloignon
Re : [Réglé] Renomer des fichiers en utilisant des parties du nom original
Hello,
Merci pour ton aide Pingouinux, je teste ça dans la matinée (je n'ai pas ces fichiers app avec moi là) et je te fais un retour. Mais bon, connaissant ta grande maîtrise de la console, je n'ai pas vraiment de doute quand au résultat
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#4 Le 18/04/2019, à 06:30
- MicP
Re : [Réglé] Renomer des fichiers en utilisant des parties du nom original
Bonjour
On peut aussi le faire
en n'utilisant que l'interpréteur de commandes bash :
michel@debg53sw:~$ ls
app070319.txt app080319.txt app090319.txt app100319.txt app110319.txt
michel@debg53sw:~$
michel@debg53sw:~$ maReg='(.*)([0-9]{2})([0-9]{2})([0-9]{2})(.*)'
michel@debg53sw:~$ for nomFich in app*.txt; do [[ $nomFich =~ $maReg ]] && mv "$nomFich" "${BASH_REMATCH[1]}${BASH_REMATCH[4]}${BASH_REMATCH[3]}${BASH_REMATCH[2]}${BASH_REMATCH[5]}"; done
michel@debg53sw:~$
michel@debg53sw:~$ ls
app190307.txt app190308.txt app190309.txt app190310.txt app190311.txt
Mais bon, c'est plus long à écrire qu'avec la méthode de pingouinux qui utilise la commande rename
Dernière modification par MicP (Le 18/04/2019, à 06:37)
Hors ligne
#5 Le 18/04/2019, à 18:01
- soupaloignon
Re : [Réglé] Renomer des fichiers en utilisant des parties du nom original
Bonjour le forum,
Je n'ai pas pu écrire un retour dans la journée comme je le pensais, because j'étais à mon boulot et je n'avais pas mes identifiants de connexion ...
Retour maison (après un petit apéro quand même) et j'arrive.
Pingouinux une fois de plus respect, ta commande marche super bien et en plus comme elle est simple, mais efficace, je pense même l'avoir compris.
>> MicP
Respect, impressionnant ta commande. Mais comme tu le disais toi même, c'est largement plus long à écrire que la ligne avec rename. Mais par contre cela montre la puissance de bash.
Merci à tous les 2 pour vos messages, je passe le sujet en résolu
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne