Comment renommer des fichiers en utilisant R?
j'ai plus de 700 fichiers dans un dossier nommé comme: les fichiers du numéro 1 au numéro 9 sont nommés pour le premier mois:
water_200101_01.img
water_200101_09.img
les fichiers du numéro 10 au numéro 30 sont nommés:
water_200101_10.img
water_200101_30.img
Et ainsi de suite pour le deuxième mois: les fichiers du numéro 1 au numéro 9 sont nommés:
water_200102_01.img
water_200102_09.img
les fichiers du numéro 10 au numéro 30 sont nommés:
water_200102_10.img
water_200102_30.img
Comment puis-je renommer sans modifier les fichiers. il suffit de changer le nams, par exemple
water_1
water_2
...till...
water_700
2 réponses
file.rename
renommer des fichiers, et il peut prendre un vecteur de deux from
et to
noms.
Donc quelque chose comme:
file.rename(list.files(pattern="water_*.img"), paste0("water_", 1:700))
ça pourrait marcher.
si vous vous souciez de l'ordre en particulier, vous pouvez soit trier la liste des fichiers qui existent actuellement, ou s'ils suivent un motif particulier, créer directement le vecteur des noms de fichiers (bien que je note que 700 n'est pas un multiple de 30).
je vais le mettre de côté la question, "pourquoi voudriez-vous ?"puisque vous semblez jeter l'information dans le nom de fichier, mais probablement que l'information est contenue ailleurs aussi bien.
j'ai écrit cela pour moi. Il est rapide, permet regex dans find et replace, et prend en charge les "essais".
si vous êtes sur un mac, il peut utiliser applescript pour choisir le dossier courant dans le Finder comme dossier cible.
umxRenameFile <- function(baseFolder = "Finder", findStr = NA, replaceStr = NA, listPattern = NA, test = T, overwrite = F) {
# uppercase = u
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)
}