Come rinominare i file usando R?

Ho oltre 700 file in una cartella denominata come: i file dal numero 1 al numero9 sono nominati per il primo mese:

water_200101_01.img water_200101_09.img 

i file dal numero 10 al numero30 sono nominati:

 water_200101_10.img water_200101_30.img 

E così via per il secondo mese: i file dal numero 1 al numero9 sono nominati:

 water_200102_01.img water_200102_09.img 

i file dal numero 10 al numero30 sono nominati:

 water_200102_10.img water_200102_30.img 

Come posso rinominarli senza apportare modifiche ai file. basta cambiare i nams, per esempio

 water_1 water_2 ...till... water_700 

file.rename rinominerà i file e può richiedere un vettore di entrambi i nomi.

Quindi qualcosa come:

 file.rename(list.files(pattern="water_*.img"), paste0("water_", 1:700)) 

potrebbe funzionare

Se ci si preoccupa specificamente dell’ordine, è ansible ordinare l’elenco di file attualmente esistenti oppure, se seguono uno schema particolare, creare direttamente il vettore di nomi di file (anche se noto che 700 non è un multiplo di 30).

Metterò da parte la domanda, “perché vorresti?” dal momento che sembra che tu stia buttando via le informazioni nel nome del file, ma presumibilmente anche le informazioni sono contenute altrove.

Ho scritto questo per me stesso. È veloce, consente la regex di trovare e sostituire e supporta le “corse di prova”.

Se sei su un Mac, puoi usare applescript per selezionare la cartella corrente nel Finder come cartella di destinazione.

 umxRenameFile < - function(baseFolder = "Finder", findStr = NA, replaceStr = NA, listPattern = NA, test = T, overwrite = F) { # uppercase = u$1 if(baseFolder == "Finder"){ baseFolder = system(intern = T, "osascript -e 'tell application \"Finder\" to get the POSIX path of (target of front window as alias)'") message("Using front-most Finder window:", baseFolder) } else if(baseFolder == "") { baseFolder = paste(dirname(file.choose(new = FALSE)), "/", sep = "") ## choose a directory message("Using selected folder:", baseFolder) } if(is.na(listPattern)){ listPattern = findStr } a = list.files(baseFolder, pattern = listPattern) message("found ", length(a), " possible files") changed = 0 for (fn in a) { findB = grepl(pattern = findStr, fn) # returns 1 if found if(findB){ fnew = gsub(findStr, replace = replaceStr, fn) # replace all instances if(test){ message("would change ", fn, " to ", fnew) } else { if((!overwrite) & file.exists(paste(baseFolder, fnew, sep = ""))){ message("renaming ", fn, "to", fnew, "failed as already exists. To overwrite set T") } else { file.rename(paste(baseFolder, fn, sep = ""), paste(baseFolder, fnew, sep = "")) changed = changed + 1; } } }else{ if(test){ # message(paste("bad file",fn)) } } } message("changed ", changed) }