Como posso mudar o nome dos ficheiros usando o R?
Tenho mais de 700 ficheiros numa pasta chamada:
os ficheiros do número 1 ao número 9 são nomeados para o primeiro mês:
water_200101_01.img
water_200101_09.img
os ficheiros do número 10 ao número 30 têm o nome:
water_200101_10.img
water_200101_30.img
e assim por diante para o segundo mês: os ficheiros do número 1 para o número 9 são nomeados:
water_200102_01.img
water_200102_09.img
os ficheiros do número 10 ao número 30 têm o nome:
water_200102_10.img
water_200102_30.img
Como posso renomeá-los sem fazer alterações nos arquivos? basta mudar os nams, por exemplo
water_1
water_2
...till...
water_700
27
2 answers
file.rename
irá mudar o nome dos arquivos,e pode tomar um vetor de ambos os nomes from
e to
.
file.rename(list.files(pattern="water_*.img"), paste0("water_", 1:700))
Pode resultar.
Se se importar com a ordem especificamente, você pode ordenar a lista de arquivos que existem atualmente, ou se eles seguem um padrão particular, basta criar o vetor de nomes de arquivos diretamente (embora eu note que 700 não é um múltiplo de 30).
Vou pôr de lado a pergunta: "porque haverias de querer?"já que pareces estar a atirar informação ausente no nome do ficheiro, mas presumivelmente essa informação está contida em outro lugar também. 38
Author: Brian Diggs, 2017-06-20 22:05:44
Escrevi isto para mim. É rápido, permite regex em encontrar e substituir, e suporta "trial runs".
Se você está em um mac, ele pode usar applescript para escolher a pasta atual no Localizador como uma pasta 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)
}
4
Author: tim, 2013-09-17 16:58:51