varias - ¿Cómo cambio el nombre de los archivos usando R?
superponer graficas en r (2)
Tengo más de 700 archivos en una carpeta llamada así: los archivos del número 1 al número 9 se nombran para el primer mes:
water_200101_01.img
water_200101_09.img
los archivos del número 10 al número 30 se nombran:
water_200101_10.img
water_200101_30.img
Y así sucesivamente para el segundo mes: los archivos del número 1 al número 9 se nombran:
water_200102_01.img
water_200102_09.img
los archivos del número 10 al número 30 se nombran:
water_200102_10.img
water_200102_30.img
¿Cómo puedo cambiarles el nombre sin hacer ningún cambio en los archivos? simplemente cambie los nams, por ejemplo
water_1
water_2
...till...
water_700
Escribí esto por mí mismo. Es rápido, permite expresiones regulares para buscar y reemplazar, y admite "ejecuciones de prueba".
Si está en un mac, puede usar applescript para seleccionar la carpeta actual en el Finder como una carpeta de destino.
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)
}
file.rename
cambiará el nombre de los archivos, y puede tomar un vector de ambos from
y to
nombres.
Entonces algo así como:
file.rename(list.files(pattern="water_*.img"), paste0("water_", 1:700))
Podría funcionar.
Si se preocupa específicamente por el pedido, puede ordenar la lista de archivos que existen actualmente, o si siguen un patrón particular, simplemente cree el vector de nombres de archivo directamente (aunque observo que 700 no es un múltiplo de 30).
Dejaré de lado la pregunta, "¿por qué querrías?" ya que parece estar tirando información en el nombre del archivo, pero presumiblemente esa información también está contenida en otros lugares.