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
27
demandé sur zx8754 2012-05-25 21:35:39

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.

38
répondu Brian Diggs 2017-06-20 22:05:44

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)
}
4
répondu tim 2013-09-17 16:58:51