R中批量重命名文件

Batch renaming files in R

我有一个包含数千个文件的目录,我想重命名这些文件的一个子集。

这是我正在尝试做的一个高度简化的示例:

    library(dplyr)    
    f <- as.data.frame(list.files(), header=FALSE)
    colnames(f) <- 'origFilename'
    f2 <- f %>% separate(origFilename, into=c('ID','date','channel','position','extension'), sep='_', remove=FALSE) 
        %>% filter(ID > 10)
    f2$ID <- as.numeric(f2$ID)
    f3 <- f2 %>% mutate(newID = ID + 1)
    f3$newFilename <- paste(f3$newID, f3$date, f3$channel, f3$position, 
    f3$extension, sep='_')
    f3$origFilename <- paste(f3$ID, f3$date, f3$channel, f3$position, f3$extension, sep='_')
    file.rename(f3$origFilename, f3$newFilename)

此代码的最后一行出现以下错误:

Error in file.rename(f$files.old, f$files.new) : invalid 'from' argument

关于如何解决这个问题有什么想法吗? 抱歉,我不确定如何在这里制作一个完全可重现的示例...

您的解决方案存在问题as.data.framefile.rename() 获取列表作为输入。

你可以简单地这样做:

file.rename(list.files(), paste(list.files(), "foo", sep="_")) 

但是这样做的问题是您要更改文件的扩展名。以上会将 mycode.r 更改为 mycode.r_foo,然后 R.

无法打开

您在找这样的东西吗?

f <- as.data.frame(list.files(), header=FALSE)
colnames(f) <- 'files.old'
#"foo" will be added just before the extension
f$files.new <- sapply(f$files.old,function(x) gsub("^[^.]*.",paste(gsub(".[^.]*$", "", x), 'foo.', sep='_'),x))
file.rename(as.vector(f$files.old), as.vector(f$files.new))