En shell, on pourrait faire simplement :
for x in *]*.avi ; do
mv -i "$x" "${x%]*.avi}.avi"
done
Le shell peut produire une liste des noms de fichiers avec juste un glob normal et ${var%pattern}
supprime le motif correspondant (le plus court) à la fin de la chaîne dans la variable var
. Puisque l'extension finale est toujours .avi
, je viens de le retirer avec le motif et de le rajouter. Avec les guillemets, cela devrait également fonctionner avec les noms de fichiers contenant des espaces, comme Fancy Name for a Show.s01e01]Asdf.avi
Cela renommera les fichiers. Vous avez besoin du \w* pour signifier n'importe quel nombre de caractères alphanumériques.
rename 's/\]\w*//' *
Référence :http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#UsingSimpleWildcards
C'est peu pratique - les autres réponses sont beaucoup plus rapides et plus courtes - mais...
Vous pouvez utiliser PowerShell ! Microsoft l'a récemment ouvert et l'a rendu multiplateforme. Pour les téléchargements et les instructions d'installation pour votre système d'exploitation, consultez la section "Obtenir PowerShell".
Une fois installé, vous pouvez utiliser ce bref script :
Get-ChildItem -File '*]*.avi' | ForEach-Object {
Rename-Item $_ -NewName (($_.Name -Split ']')[0] + '.avi')
}
Fondamentalement, il parcourt chaque objet du répertoire courant qui est un fichier correspondant à *]*.avi
, prend la partie avant la parenthèse, vire .avi
de nouveau dessus et l'attribue comme nouveau nom.
Pour l'exécuter directement depuis Bash, utilisez ce one-liner semi-golfé :
powershell -command $'gci -File \'*]*.avi\'|%{rename-item $_ -NewName (($_.Name -Split \']\')[0]+\'.avi\')}'
Citation s'échappant avec l'aimable autorisation de cette réponse Stack Overflow.
(Testé dans Bash sur Ubuntu sous Windows. Il existe probablement une manière beaucoup plus courte de le faire avec PowerShell, mais je voulais montrer quelque chose qui soit compréhensible pour les personnes qui ne connaissent pas les expressions régulières.)