Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R重命名子目录中的文件_R_File_Path_File Rename - Fatal编程技术网

使用R重命名子目录中的文件

使用R重命名子目录中的文件,r,file,path,file-rename,R,File,Path,File Rename,我想重命名子目录中的所有jpeg文件以及子目录名,例如jpeg文件 WorkingDirectory/FolderA/ -> a.jpg WorkingDirectory/FolderB/ -> a.jpg 想改变为 WorkingDirectory/FolderA/ -> FolderA-a.jpg WorkingDirectory/FolderB/ -> FolderB-a.jpg 到目前为止,我正在使用 old.names <- list.files(pa

我想重命名子目录中的所有jpeg文件以及子目录名,例如jpeg文件

WorkingDirectory/FolderA/ -> a.jpg
WorkingDirectory/FolderB/ -> a.jpg
想改变为

WorkingDirectory/FolderA/ -> FolderA-a.jpg
WorkingDirectory/FolderB/ -> FolderB-a.jpg
到目前为止,我正在使用

old.names <- list.files(path = ".", pattern = "jpeg$", recursive = TRUE)

new.names <- old.names
new.names  = gsub("/", "-", new.names)
new.names  = gsub(".jpeg", "", new.names)

final <- data.frame(do.call(cbind,mget(c('old.names','new.names'))))

final$old.names  = gsub("", "", final$old.names)
final$new.names  = gsub("", "", final$new.names)
file.rename(final$old.names, paste0(final$new.names, ".jpeg"))

old.names以您上面的示例来看,这似乎足够了:

old.names <- list.files(path = ".", pattern = "jpeg$", recursive = TRUE)

new.names <- old.names
new.names <- gsub("/", "-", new.names)
new.names <- file.path(dirname(old.names), new.names)

file.rename(old.names, new.names)

old.names您正在从示例代码中的
new.names
中剥离文件夹名称

这应该起作用:

old.names <- list.files(path = ".", pattern = "jp[e]*g$", recursive = TRUE)
old.names;
#[1] "tmp/FolderA/a.jpg" "tmp/FolderB/b.jpg"

new.names <- sapply(strsplit(old.names, "/"), function(x)
    sprintf("%s/%s",
        paste0(x[1:(length(x) - 1)], collapse = "/"),
        paste0(x[(length(x) - 1):length(x)], collapse = "-")));
new.names;
#[1] "tmp/FolderA/FolderA-a.jpg" "tmp/FolderB/FolderB-b.jpg"

file.rename(old.names, new.names);

old.names我相信如果从
WorkingDirectory
中执行,而不是从
“WorkingDirectory/FolderA/WorkingDirectory-FolderA-a.jpg”中执行,将生成
new.names
list.files
将列出
FolderA/a.jpg
如果
WorkingDirectory
是他的工作目录,我同意,基于您给出的假设,您的解决方案工作得非常好;但是,如果在
“WorkingDirectory”
之外运行脚本,则此操作将不起作用。TBH,我不清楚OP想从哪个文件夹重命名文件。这就是为什么我给出的解决方案应该适用于任意子文件夹。yap“WorkingDirectory”是我的工作目录。这一个也更容易,我花了4个小时才弄清楚>dirname的重要性