Comment renommer 350 fichiers d'un coup d'un seul sous Linux-bash

Je me suis retrouvé dans la situation ou dans un répertoire j'avais 350 fichiers du style dtmgrid122413_1m.asc.gz qu'il fallai que je renomme en MNT_1224-13_1m.asc.gz
grâce aux pipe et à sed c'est possible en une seule commande:
for i in dtm*; do (mv $i `echo $i|sed 's/dtmgrid\([1-9]\{4\}\)/MNT_\1-/'`); done
on retrouve une boucle for qui parcoure chaque fichier dans le répertoire courant et le stocke dans la variable i. Puis pour chaque fichier trouver on va faire un mv pour renommer l'ancien nom de fichier se trouvant en $i en quelquechose qui se trouve etre le résultat de l'expression:
`echo $i|sed 's/dtmgrid\([1-9]\{4\}\)/MNT_\1-/'`
notez bien que l'expression est entre backquotes c'est grâce à cela que l'on reçoit la valeur finale de l'éxécution de cette suite de commande et non pas une simple chaine de caractères équivalent à notre commande...
en gros c'est grâce à une substitution sed " s/avant/apres/ " qui reçoit l'ancien nom de fichier et le convertit selon nos désirs grâce à l'expression régulière qui dit que l'on veut remplacer:
dtmgrid\([1-9]\{4\}\)
par:
MNT_\1-
ce qui signifie que dtmgrid sera remplace sans autre par MNT_ et que le contenu de la chaine se trouvant entre parenthèse \( et \) sera à l'arrivée dans la chaine finale utilisé tel quel grâce au \1 et que l'on veut faire suivre cela par un - avant de laisser s'afficher le reste de la chaine en l'état
pour ce qui est du contenu ente parenthèse et bien le [1-9] indique que l'on cherche n'importe quel chiffre entre 1 et 9 et le \{4\} signifie que l'on veut prendre en compte très exactement 4 chiffres.

Commentaires

Posts les plus consultés de ce blog

Comment extraire les fichiers disques en raw d'un backup proxmox vma

Utiliser curl pour récupérer des logs sur un serveur Microsoft IIS avec l'authentification ntlm

Find the lists of disks of your Proxmox VM stored in a ceph cluster