在R中递归复制文件夹

tyg4sfes  于 2024-01-03  发布在  其他
关注(0)|答案(6)|浏览(122)

我在函数中缺少了什么吗?
我想将一个包含一些文件的文件夹和另一个子文件夹从一个位置复制到另一个位置。我尝试使用file.copy(from, to, recursive=TRUE),但它显示错误消息:
在文件.copy(“my_folder”,“new_folder”,:
“recursive”将被忽略,因为“to”不是单个现有目录
结果是一个名为new_folder的文件,没有内容。
有没有办法用R复制完整的文件夹结构?

a7qyws3x

a7qyws3x1#

好吧,我刚刚弄明白了错误的意思......仔细阅读每一个字!
我必须提前创建新目录,现在我可以复制所有内容.

dir.create('new_folder')
file.copy("my_folder", "new_folder", recursive=TRUE)

字符串
这正如预期的那样工作。

wn9m85ua

wn9m85ua2#

我认为R.utils::copyDirectory(oldDir, newDir)是你所要求的解决方案,它也不需要先创建newDir

6rqinv9w

6rqinv9w3#

正如@matifou在评论中所说,提问者自己接受的答案有点令人困惑,因为你最终会将复制的文件夹放在一个与复制的文件夹同名的文件夹中.
case:你想把folder_X移到folder_Z。

# create empty folder Z inside folder X
dir.create('(...)/folder_X/folder_Z')
# copy the folder
file.copy('(...)/path_to_folder_Z', '(...)/folder_X')

字符串
所以file.copy的第二个参数应该是justfolder_X,而不是folder_X中新创建的folder_Z。
因为如果你这样做,文件夹结构将是这样的,这可能不是你想要的:
(...)/folder_X/folder_Z/folder_Z
(也许这会为某人节省保存我花了10分钟左右才弄清楚的时间)

hrysbysz

hrysbysz4#

如果您想复制位于一个文件夹中的文件,以便它们位于第二个文件夹中,例如。

dir1/file1.txt
dir1/nested/file2.txt

字符串
收件人:

dir2/file1.txt
dir2/nested/file2.txt


然后这段代码工作:

from <- "dir1"
to   <- "dir2"
file.copy(list.files(from, full.names = TRUE), 
          to, 
          recursive = TRUE)


避免在list.files()命令中使用recursive=TRUE,否则会丢失嵌套。

file.copy(list.files(from, full.names = TRUE, recursive = TRUE), 
          to, 
          recursive = TRUE)

# incorrect
# dir2/file1.txt
# dir2/file2.txt


上面的其他答案对上述情况没有帮助,例如:

file.copy(from, to, recursive=TRUE)

# incorrect - makes:
# dir2/dir1/file1.txt
# dir2/dir1/nested/file2.txt

file.copy('(...)/path_to_folder_Z', '(...)/folder_X')
# overwrites existing folder if in same parent directory

sqxo8psd

sqxo8psd5#

我宁愿写一个R函数来使用终端复制目录。下面是我使用的,但请注意,到目前为止我只为Linux和OSX写了它。

dir.copy <- function(from, to) {
  os <- Sys.info()['sysname']
  if (os == "Darwin" || os == "Linux") {
    command <- sprintf("cp -R '%s' '%s'", from, to)
    system(command, intern = TRUE)   
  }
}

字符串
快速,简单,工作起来像一个魅力。

wbgh16ku

wbgh16ku6#

还有另一种可能性:

create_Directory <- function(source_Directory = "C:/dir1",
                             target_Directory = "C:/dir2")
{
  setwd(source_Directory)
  list_Dirs <- list.dirs()
  setwd(target_Directory)
  bool_Dir_Exists <- dir.exists(list_Dirs)
  dirs_To_Create <- list_Dirs[!bool_Dir_Exists]
  for(dir in dirs_To_Create)
  {
    dir.create(dir)
  }
}

copy_Content_From_One_Directory_To_Another <- function(source_Directory = "C:/dir1",
                                                       target_Directory = "C:/dir2")
{
  #### Create the sub directories ####
  create_Directory(source_Directory = source_Directory,
                   target_Directory = target_Directory)

  #### Copy the files ####
  setwd(source_Directory)
  list_Files <- list.files(recursive = TRUE, full.names = TRUE)
  list_Files <- gsub(pattern = paste0("(\\.)",.Platform$file.sep), replacement = "", list_Files)

  file.copy(from = paste0(source_Directory,  .Platform$file.sep 
, list_Files),
            to = paste0(target_Directory, .Platform$file.sep , list_Files))
}

copy_Content_From_One_Directory_To_Another()

字符串

相关问题