使用R复制文件

问题描述 投票:0回答:3

作为在 Windows 下运行的 R 中执行的较大任务的一部分,我想在目录之间复制选定的文件。是否可以在 R 中给出像

cp patha/filea*.csv pathb
这样的命令(注意通配符,以获得额外的趣味)?

r file copy
3个回答
56
投票

我认为没有直接的方法(避免被淘汰),但像下面这样的方法通常对我有用。

flist <- list.files("patha", "^filea.+[.]csv$", full.names = TRUE)
file.copy(flist, "pathb")

备注:

  • 我特意分解为两步,可以合并。
  • 查看正则表达式:R 使用真正的正则表达式,并且还在两个单独的参数中将文件模式与路径分开。
  • 注意正则表达式中的
    ^
    $
    (字符串的开头/结尾)——这是一个常见的问题,因为这些是通配符类型模式的隐式,但需要正则表达式(以免某些文件名与通配符模式,但也可以选择以附加文本开始和/或结束)。
  • 在 Windows 世界中,人们通常会将
    ignore.case = TRUE
    参数添加到
    list.files
    ,以模拟目录搜索在该操作系统中不区分大小写的事实。
  • R 的
    glob2rx()
    函数提供了一种将通配符模式转换为正则表达式的便捷方法。例如
    fpattern = glob2rx('filea*.csv')
    返回不同但等效的正则表达式。

12
投票

你可以

  • 使用
    system()
    来触发命令,就像在 shell 上一样,包括通配符
  • 使用
    list.files()
    又名
    dir()
    进行 globbing / reg.exp 匹配自己并单独复制文件
  • 在单个文件上使用
    file.copy
    ,如 mjv 的答案所示

0
投票

对于其他脚本小子:

mainDir<-getwd() #so it creates the file wherever your working directory is
  subDir<-"name_of_my_new_sub-directory"
  dir.create(file.path(mainDir, subDir), showWarnings = FALSE)
  setwd(file.path(mainDir, subDir))
© www.soinside.com 2019 - 2024. All rights reserved.