
Envoyé par
dahu29
Je souhaite renommer des fichiers présents dans un répertoire qui ont cette tête :
TOTO_A001_28092017_4276193.fic_2017100518291507220973313
vers ce formalisme
TOTO_A001_2017100518291507220973313
Donc supprimer toute la chaine de caractère entre A001_ et 201710

Envoyé par
BufferBob
la version longue existe néanmoins :
for src in *; do dest=$(sed -r 's/A001_.+?201710/A001_201710/' <<< "$src"); mv "$src" "$dest"; done
Attention!
Cette commande va traiter tous les fichiers, même ceux qui ne sont pas concernés, ce qui ne va pas faire joli (mv "$src" "$src")!
Je préfèrerais ne traiter que les fichiers concernés (s'il y en a d'autres dans le même répertoire):
for src in *A001_*201710*; do dest=$(sed -r 's/A001_.+?201710/A001_201710/' <<< "$src"); mv "$src" "$dest"; done
De plus, je te souhaite fortement de ne pas avoir de fichier contenant plusieurs occurrences de 201710, comme par exemple TOTO_A001_28092017_4276193.fic_2017100518291507220171013 qui risque d'être salement raccourci! 
On peut limiter la casse en mettant le "_" devant:
for src in *A001_*201710*; do dest=$(sed -e 's/A001_.*_201710/A001_201710/' <<< "$src"); mv "$src" "$dest"; done
Au fait, qui a eu cette idée folle un jour d'inventer un tel nommage???
Partager