如何根据文件名向量用list.files()遍历子目录并复制文件?
问题原因
list.files()的pattern参数默认仅接受单个正则表达式字符串,当传入向量c("banana", "maca")时,它只会读取向量的第一个元素("banana")作为匹配规则,因此无法识别第二个子文件夹中的"maca"文件。
解决方案
将文件名向量转换为支持多关键词匹配的正则表达式(用|分隔表示“或”逻辑),同时开启full.names = TRUE参数获取文件完整路径,避免file.copy因路径问题失败。
修正后的代码如下:
# 文件名向量 test <- c("banana", "maca") # 目录路径 from.dir <- "C:/Users/Windows 10/Documents/teste" to.dir <- "C:/Users/Windows 10/Documents/teste2" # 把向量转为多匹配正则表达式 pattern_str <- paste(test, collapse = "|") # 递归查找符合条件的文件(返回完整路径) files <- list.files(path = from.dir, pattern = pattern_str, recursive = TRUE, full.names = TRUE) # 批量复制文件 for (f in files) { file.copy(from = f, to = to.dir) }
额外说明
- 如果需要精确匹配文件名(比如只匹配完全叫"banana"或"maca"的文件,而非包含这些字符串的文件),可以把正则表达式改为:
其中pattern_str <- paste0("^", test, "$", collapse = "|")^表示字符串开头,$表示字符串结尾,确保完全匹配文件名。
内容的提问来源于stack exchange,提问作者Wilson Souza
相关产品推荐
相关产品推荐

