Je me bats actuellement avec certains dossiers de musique. Une fois , je décidé de les nommer en suivant le modèle: artist - album - year
. J'ai réalisé aujourd'hui que ce n'était pas une décision intelligente 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 répertorié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 script regex et 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 ait un -
séparateur.
la source
-
en eux?Réponses:
En supposant que vous ayez accès à perl
rename
(généralement disponible dans Ubuntu - merci à @Serg pour clarifier la différence. En cas de doute, appelez/usr/bin/rename
et vous devriez obtenir le bon), vous pouvez utiliser:Supprimez
-n
après le test pour renommer les répertoires. Cela suppose que tous les albums datent de 1000 à 9999. Probablement raisonnable ...Explication
s/old/new
remplacerold
parnew
(.*)
enregistrer un nombre quelconque de caractères pour faire référence comme$1
plus tard(\d{4})\/
enregistrez quatre chiffres à la fin de la ligne pour vous y référer$2
ultérieurement.*/
correspondre à tous les répertoires (pas aux fichiers - merci à @muru pour son aide!)la source
*/
pour ne faire correspondre que les répertoires.mksh
ont un appel intégrérename
. Il suffit de le remplacer par un chemin complet ou d'appelerprename
pour appeler le renommage Perlrename
n'est pas "parfois appeléprename
" mais apparemment ce sont deux "branches" du même script, une qui n'est pas maintenue par Debian, et l'autre qui l'est. Donc voilà . . . c'est beaucoup de désordre - certains shells ont le leurrename
, le paquet perl a le sienrename
, et debian lui-même fournit un paquet séparérename.ul
dans unix.stackexchange.com/q/229230/21167Un script Python simple peut faire un tel travail:
Contenu du script:
Comment cela fonctionne:
*/
pour ne fournir que des répertoires comme arguments du script-
caractère. Le nouveau nom de fichier est construit à partir des parties que nous avons extraites.move()
la fonction dushutils
module est ce qui renomme réellement les répertoiresNotez l'utilisation:
./rename_dirs.py */
la source