Renommer des répertoires de masse pour déplacer l'année de bout en bout

11

Je suis actuellement aux prises avec certains dossiers musicaux. Une fois, j'ai décidé de les nommer en suivant le modèle: artist - album - year . Je me suis rendu compte aujourd'hui que ce n'était pas un geste intelligent et je veux maintenant nommer mes répertoires en suivant le modèle: year - artist - album car ils apparaîtront ensuite dans l'ordre croissant lorsqu'ils seront listés.

J'ai commencé à renommer à la main, mais avec environ 700 dossiers, il doit y avoir un moyen plus simple; J'ai essayé d'utiliser gprename mais je ne suis pas si bon en regex et en script bash ...

Y a-t-il quelqu'un qui pourrait m'aider à épargner mes pauvres doigts?

Quelques exemples:

Aes Dana - Memory Shell - 2004 
Anja Schneider & GummiHz - Back To Back (Remixes Part 2) - 2009

deviendrait

2004 - Aes Dana - Memory Shell
2009 - Anja Schneider & GummiHz - Back To Back (Remixes Part 2)

EDIT: Certains noms d’artiste et d’album ont des caractères spéciaux comme And.Id ou Kool & The Gang . Bien que chaque répertoire comporte - comme séparateur.

    
posée TazMayhem 29.03.2017 - 10:12
la source

2 réponses

16

En supposant que vous ayez accès à perl rename (généralement disponible dans Ubuntu - grâce à @Serg pour clarifier la différence. En cas de doute, appelez /usr/bin/rename et vous devriez obtenir le bon), vous pouvez utiliser:

rename -n 's/(.*) - (\d{4})\// - /' */

Supprimez -n après le test pour renommer les répertoires. Cela suppose que tous les albums datent entre 1000 et 9999. Probablement raisonnable ...

Explication

  • s/old/new remplace old avec new
  • (.*) enregistre n'importe quel nombre de caractères à référencer comme plus tard
  • (\d{4})\/ enregistre quatre chiffres à la fin de la ligne pour faire référence à plus tard.
  • */ correspond à tous les répertoires (pas aux fichiers - merci à @muru pour l'aide!)
réponse donnée Zanna 29.03.2017 - 10:26
la source
6

Un script Python simple peut faire ce travail:

$ tree
.
├── Aes Dana - Memory Shell - 2004
├── Anja Schneider & GummiHz - Back To Back (Remixes Part 2) - 2009
└── rename_dirs.py

2 directories, 1 file
$ ./rename_dirs.py */
$ tree
.
├── 2004 - Aes Dana  -  Memory Shell 
├── 2009 - Anja Schneider & GummiHz  -  Back To Back (Remixes Part 2) 
└── rename_dirs.py

Contenu du script:

#!/usr/bin/env python
from shutil import move;
import sys

for i in sys.argv[1:] :
    parts = i[:-1].split('-')
    year = parts[-1].strip()
    new_name = year + " - " + " - ".join(parts[:-1]).strip()
    move(i,new_name)

Comment cela fonctionne:

  • L'astuce principale est que nous exécutons un script à partir du même répertoire où résident les cibles. Nous transmettons également */ pour fournir uniquement des répertoires comme arguments du script
  • Le script effectue une itération sur tous les arguments de ligne de commande, en décomposant chaque nom de fichier en une liste de chaînes au caractère - . Le nouveau nom de fichier est construit à partir des parties que nous avons extraites.
  • La fonction move() du module shutils est ce qui renomme réellement les répertoires

Notez l'utilisation: ./rename_dirs.py */

    
réponse donnée Sergiy Kolodyazhnyy 29.03.2017 - 10:44
la source

Lire d'autres questions sur les étiquettes