Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/09/2017, à 16: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, à 18:01)

Hors ligne

#2 Le 14/09/2017, à 16: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, à 17:04)

Hors ligne

#3 Le 14/09/2017, à 17: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, à 17: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, à 17: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é smile

Hors ligne

#6 Le 14/09/2017, à 18: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, à 18:22)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 22/09/2017, à 17: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