#1 Le 14/09/2017, à 15:11
- palestrina
[Résolu]Renommer fichiers en Bash
Bonjour à tous,
Je cherche à réaliser un script en bash pour renommer en masse des fichiers dans un répertoire.
C'est la première fois que je réalise un script schell et voilà ce que j'aimerai réaliser:
j'ai un fichier au format : HEALTHY_CATFLUI_MONGODB_FLUIDE_2017-09-13_09-48-50.csv
J'aimerai obtenir : HEALTHY_CATFLUI_MONGODB_FLUIDE_20170913_0948_50.csv
avec rename
find ./ -depth -name "*-*" -exec rename 's/-//g' "{}" \;
Jj'arrive à obtenir ça:
HEALTHY_CATFLUI_MONGODB_FLUIDE_20170913_094850.csv
Mon problème est d'arriver à séparer les deux derniers chiffres du reste ( Dans l'exemple: "50" qui représente les secondes ) par un underscore
En gros je cherche un équivalent à la commande explode en bash de manière à pouvoir découper mon nom de fichier et pouvoir agir sur ces deux derniers chiffres, est ce possible à votre avis ?
merci d'avance pour votre aide
Dernière modification par palestrina (Le 14/09/2017, à 17:01)
Hors ligne
#2 Le 14/09/2017, à 15:52
- pingouinux
Re : [Résolu]Renommer fichiers en Bash
Bonjour,
Essaye en remplaçant ton rename par celui-ci, et tu enlèves -n si c'est ce que tu veux :
rename -n 's/-(..)-/$1/;s/-(..)-/$1_/'
Édité : Ou bien
rename -n 's/-(..)-(.....)-/$1$2/'
Dernière modification par pingouinux (Le 14/09/2017, à 16:04)
Hors ligne
#3 Le 14/09/2017, à 16:19
- palestrina
Re : [Résolu]Renommer fichiers en Bash
Merci à toi,
j'ai essayé les 2 méthodes mais ca ne change rien, tous les tirets - disparaissent.
je me retrouve toujours avec un fichier au format : HEALTHY_CATFLUI_MONGODB_FLUIDE_20170913_094850.csv
Je crois comprendre dans la première solution que tu essaies de cibler le 4eme tiret pour le remplacer par un _ , ca me parait logique et ça conviendrait tout à fait à ce que je veux ( HEALTHY_CATFLUI_MONGODB_FLUIDE_20170913_0948_50.csv ) mais ca ne fonctionne pas..:(
find ./ -depth -name "*-*" -exec rename -n 's/-(..)-/$1/;s/-(..)-/$1_/'
--> HEALTHY_CATFLUI_MONGODB_FLUIDE_20170913_094850.csv
find ./ -depth -name "*-*" -exec rename -n 's/-(..)-(.....)-/$1$2/'
--> HEALTHY_CATFLUI_MONGODB_FLUIDE_20170913_094850.csv
Hors ligne
#4 Le 14/09/2017, à 16:41
- pingouinux
Re : [Résolu]Renommer fichiers en Bash
La première commande fonctionne chez moi
$ find . -depth -name "*-*" -exec rename -n 's/-(..)-/$1/;s/-(..)-/$1_/' "{}" \;
./HEALTHY_CATFLUI_MONGODB_FLUIDE_2017-09-13_09-48-50.csv renamed as ./HEALTHY_CATFLUI_MONGODB_FLUIDE_20170913_0948_50.csv
J'ai corrigé la seconde, qui ne transformait pas le dernier - en _
$ find . -depth -name "*-*" -exec rename -n 's/-(..)-(.....)-(..)-/$1$2$3_/' "{}" \;
./HEALTHY_CATFLUI_MONGODB_FLUIDE_2017-09-13_09-48-50.csv renamed as ./HEALTHY_CATFLUI_MONGODB_FLUIDE_20170913_0948_50.csv
Hors ligne
#5 Le 14/09/2017, à 16:52
- palestrina
Re : [Résolu]Renommer fichiers en Bash
Merci infiniment! ça fonctionne parfaitement
Je faisait juste une connerie en lançant mon vieux script que j'avais mis dans usr/bin..du coup ca changeait rien forcément..
Merci encore pour ta réactivité
Hors ligne
#6 Le 14/09/2017, à 17:22
- Watael
Re : [Résolu]Renommer fichiers en Bash
accessoirement, pourrais-tu passer sur tous les forums sur lesquels tu as posté ta requête pour les informer que tu as eu une solution, et donner la teneur de cette solution ?!
merci.
Dernière modification par Watael (Le 14/09/2017, à 17:22)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 22/09/2017, à 16:14
- palestrina
Re : [Résolu]Renommer fichiers en Bash
Ca fonctionne parfaitement comme ceci:
find . -depth -name "*-*" -exec rename -n 's/-(..)-/$1/;s/-(..)-/$1_/' "{}" \;
Hors ligne