2017-09-16 2 views
0

J'ai plusieurs fichiers mp3 que je veux renommer pour les organiser. La plupart d'entre eux ont un format similaire: le nombre 0, suivi d'un nombre (1: 9), un espace, puis le nom du fichier mp3. Ils ressemblent à ceci:R - Renommer des fichiers dans le répertoire

head(files) 
[1] "01 50 Cent - Candy Shop.mp3"     
[2] "01 50 Cent - Fresh '83.mp3"     
[3] "01 Akon ft Eminem - Smack That.mp3"   
[4] "01 Akon ft Snoop Dog - I Wanna Love You.mp3" 
[5] "01 Aldo Ranks - Baila.mp3"     
[6] "01 Aldo Ranks - El Alicate.mp3" 

ou

head(files[1098:1102]) 
[1] "1-01 Spragga Benz - She Nuh Ready Yet.mp3"   
[2] "1-01 Tal Bachman - Darker Side Of Blue.mp3"   
[3] "1-01 When Love Takes Over (feat. Kelly Rowland).mp3" 
[4] "1-02 Big Boy - Voz Sensual.m4a"      
[5] "1-02 Come Out And See.mp3" 

Pour simplifier, mon répertoire de travail est le dossier contenant ces fichiers. Quel serait un moyen efficace de renommer ces fichiers? Probablement en utilisant une regex comme substr, grep, ou un autre? Dois-je écrire une fonction?

J'ai essayé de stocker les noms de fichiers dans une variable appelée files, mais ce n'est pas efficace car les modifications apportées aux éléments ne sont pas reflétées dans mon répertoire de travail.

Toutes les suggestions>

+1

Quels seraient les nouveaux noms? (BTW, 'substr' n'utilise pas regex.) –

+0

Par exemple, si le nom actuel est" 01 50 Cent - Fresh '83 .mp3 ", je voudrais le changer en" 50 Cent - Fresh '83 .mp3 ". – Agarp

+1

voir la commande 'sub', par ex. 'sub (" [0-9 -] + \\ s- * "," "," 01 50 Cent - Candy Shop.mp3 ")' – jenesaisquoi

Répondre

1

Je ne suis pas un expert regex, loin de là, mais celui-ci est simple.

files <- 
c("01 50 Cent - Candy Shop.mp3", "01 50 Cent - Fresh 83.mp3", 
"01 Akon ft Eminem - Smack That.mp3", "01 Akon ft Snoop Dog - I Wanna Love You.mp3", 
"01 Aldo Ranks - Baila.mp3", "01 Aldo Ranks - El Alicate.mp3" 
) 

new_names <- sub("^0[[:digit:]] ", "", files) 
new_names 

Ensuite, pour renommer les utiliser réellement file.rename.

file.rename(from = files, to = new_names)