Essayer de renommer un lot, ne peut pas trouver le bon RegEx

2

J'essaie de renommer ma collection de films. Tous les fichiers sont actuellement nommés en utilisant des points au lieu d'espaces, c'est-à-dire Men.in.Black.avi. Je veux remplacer tous les points par des espaces qui ne sont pas terriblement difficiles, mais je dois conserver le dernier point pour l'extension de fichier, à savoir .avi, .mp4, .ogg, etc.

My Googling n’a fourni aucune solution. Je suis aussi un développeur Javascript et je pourrais y voir quelques applications astucieuses. Donc, des suggestions?

    
posée trezy 21.10.2012 - 18:12
la source

3 réponses

4

Une solution consisterait à utiliser l’utilitaire Perl rename . La regex Perl \.(?=.*\.) ne correspond à un point que lorsqu'il y a un autre point plus tard.

rename 's/\.(?=.*\.)/ /g' *.*.*

Si vous souhaitez également agir sur les fichiers dans les sous-répertoires:

shopt -s globstar    # you can put this in your ~/.bashrc
rename 's/\.(?=.*\.)/ /g' **/*.*.*

Cela fonctionne en supposant que vous n’avez pas de points dans les noms de vos répertoires. Sinon, je pense que la méthode la plus simple serait d'utiliser find :

find -depth -name '*.*.*' -exec rename 's/\.(?=.*\.)/ /g' {} +

Vous pouvez également utiliser zsh (cela ne renomme que les fichiers réguliers et laisse les noms de répertoires seuls, en raison du qualificatif de glob (.) à la fin):

autoload zmv    # you can put this in your ~/.zshrc
zmv -Q '(**/)(*.*)(.[^.]##)(.)' '${2//./ }'
    
réponse donnée Gilles 21.10.2012 - 18:35
la source
0

En écrivant cette question, je me suis rendu compte que je n’avais pas vérifié le centre logiciel Ubuntu. J'ai trouvé une application, pyRenamer, qui a accompli un travail fantastique dans l'accomplissement de ma tâche. J'ai fini par changer tous les points en espaces, puis en changeant toutes les occurrences des extensions de fichiers précédées d'un espace, à savoir "avi", "mp4", "ogg", pour remplacer les espaces par des points. Ce n'est pas la meilleure option car il pourrait y avoir un film avec avi ou ogg dans le titre, ce qui constituerait une douleur majeure, mais il a fait l'affaire cette fois.

Je suis toujours intéressé par la solution RegEx plus simple.

    
réponse donnée trezy 21.10.2012 - 18:12
la source
0
cd $movielibrary
rename -n 's/\./ /g;s/ ([^ ]*$)/./' *

Est-ce que ça a l'air bien? Réexécutez la dernière commande sans -n.

    
réponse donnée sre 21.10.2012 - 18:36
la source

Lire d'autres questions sur les étiquettes