Ich habe über 700 Dateien in einem Ordner mit dem Namen: Dateien von Nummer 1 bis Nummer 9 werden für den ersten Monat benannt:
water_200101_01.img
water_200101_09.img
dateien von Nummer 10 bis Nummer 30 heißen:
water_200101_10.img
water_200101_30.img
Und so weiter für den zweiten Monat: Dateien von Nummer 1 bis Nummer 9 werden benannt:
water_200102_01.img
water_200102_09.img
dateien von Nummer 10 bis Nummer 30 heißen:
water_200102_10.img
water_200102_30.img
Wie kann ich sie umbenennen, ohne Änderungen an den Dateien vorzunehmen? Ändern Sie einfach die Namen, zum Beispiel
water_1
water_2
...till...
water_700
file.rename
benennt Dateien um und es kann ein Vektor von from
und to
Namen verwendet werden.
Also so etwas wie:
file.rename(list.files(pattern="water_*.img"), paste0("water_", 1:700))
könnte funktionieren.
Wenn Sie sich speziell um die Reihenfolge kümmern, können Sie entweder die Liste der derzeit vorhandenen Dateien sortieren oder, wenn sie einem bestimmten Muster folgen, den Vektor der Dateinamen direkt erstellen (obwohl 700 kein Vielfaches von 30 ist).
Ich werde die Frage beiseite legen: "Warum würdest du das wollen?" da Sie Informationen im Dateinamen wegzuwerfen scheinen, diese Informationen aber vermutlich auch an anderer Stelle enthalten sind.
Ich habe das für mich geschrieben. Es ist schnell, ermöglicht reguläres Suchen und Ersetzen und unterstützt "Probeläufe".
Wenn Sie auf einem Mac arbeiten, können Sie den aktuellen Ordner im Finder mithilfe von AppleScript als Zielordner auswählen.
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)
}