我在函数中缺少了什么吗?我想将一个包含一些文件的文件夹和另一个子文件夹从一个位置复制到另一个位置。我尝试使用file.copy(from, to, recursive=TRUE),但它显示错误消息:在文件.copy(“my_folder”,“new_folder”,:“recursive”将被忽略,因为“to”不是单个现有目录结果是一个名为new_folder的文件,没有内容。有没有办法用R复制完整的文件夹结构?
file.copy(from, to, recursive=TRUE)
new_folder
a7qyws3x1#
好吧,我刚刚弄明白了错误的意思......仔细阅读每一个字!我必须提前创建新目录,现在我可以复制所有内容.
dir.create('new_folder') file.copy("my_folder", "new_folder", recursive=TRUE)
字符串这正如预期的那样工作。
wn9m85ua2#
我认为R.utils::copyDirectory(oldDir, newDir)是你所要求的解决方案,它也不需要先创建newDir。
R.utils::copyDirectory(oldDir, newDir)
newDir
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分钟左右才弄清楚的时间)
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,否则会丢失嵌套。
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
型
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) } }
字符串快速,简单,工作起来像一个魅力。
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()
字符串
6条答案
按热度按时间a7qyws3x1#
好吧,我刚刚弄明白了错误的意思......仔细阅读每一个字!
我必须提前创建新目录,现在我可以复制所有内容.
字符串
这正如预期的那样工作。
wn9m85ua2#
我认为
R.utils::copyDirectory(oldDir, newDir)
是你所要求的解决方案,它也不需要先创建newDir
。6rqinv9w3#
正如@matifou在评论中所说,提问者自己接受的答案有点令人困惑,因为你最终会将复制的文件夹放在一个与复制的文件夹同名的文件夹中.
case:你想把folder_X移到folder_Z。
字符串
所以file.copy的第二个参数应该是justfolder_X,而不是folder_X中新创建的folder_Z。
因为如果你这样做,文件夹结构将是这样的,这可能不是你想要的:
(...)/folder_X/folder_Z/folder_Z
(也许这会为某人节省保存我花了10分钟左右才弄清楚的时间)
hrysbysz4#
如果您想复制位于一个文件夹中的文件,以便它们位于第二个文件夹中,例如。
字符串
收件人:
型
然后这段代码工作:
型
避免在
list.files()
命令中使用recursive=TRUE
,否则会丢失嵌套。型
上面的其他答案对上述情况没有帮助,例如:
型
sqxo8psd5#
我宁愿写一个R函数来使用终端复制目录。下面是我使用的,但请注意,到目前为止我只为Linux和OSX写了它。
字符串
快速,简单,工作起来像一个魅力。
wbgh16ku6#
还有另一种可能性:
字符串