在R语言中使用googledrive包上传整个目录树的最优方法是什么?
使用googledrive包上传完整目录树到Google Drive
要实现完整目录树的上传,核心思路是递归遍历本地目录结构:先在Google Drive创建对应层级的文件夹,再上传文件夹内的文件,对子目录重复这个过程。以下是具体实现步骤:
1. 准备工作
确保已安装并加载googledrive包,完成Google Drive授权:
# 安装包(首次使用) install.packages("googledrive") # 加载包 library(googledrive) # 完成授权(会跳转浏览器,按提示操作) drive_auth()
2. 编写递归上传函数
这个函数会自动处理目录层级,创建对应文件夹并上传所有文件:
upload_directory_tree <- function(local_path, drive_parent = NULL) { # 获取本地目录名称 dir_name <- basename(normalizePath(local_path)) # 在Google Drive创建对应文件夹 drive_folder <- if (is.null(drive_parent)) { drive_mkdir(name = dir_name) # 根目录下创建 } else { drive_mkdir(name = dir_name, parent = drive_parent) # 指定父文件夹下创建 } # 获取本地目录下的所有文件和子目录 local_contents <- list.files(local_path, full.names = TRUE, recursive = FALSE) # 遍历处理每个内容 for (item in local_contents) { if (file.info(item)$isdir) { # 递归处理子目录 upload_directory_tree(item, drive_parent = drive_folder) } else { # 上传文件到当前Google Drive文件夹 drive_upload(media = item, path = drive_folder, name = basename(item)) cat("已上传:", basename(item), "\n") } } return(drive_folder) }
3. 使用函数上传目录树
上传到Google Drive根目录:
# 替换为你的本地目录绝对路径 upload_directory_tree("~/Documents/my_project_folder")上传到Google Drive指定文件夹:
先定位目标父文件夹,再传入函数:# 找到目标父文件夹(替换为你的文件夹路径或名称) target_parent <- drive_get(path = "/My Drive/已有文件夹") # 上传目录到该文件夹下 upload_directory_tree("~/Documents/my_project_folder", drive_parent = target_parent)
注意事项
- 建议使用绝对路径指定本地目录,避免路径解析错误
- 若遇到文件名重复,
drive_upload默认会添加后缀(如file.txt→file (1).txt),可添加overwrite = TRUE参数强制覆盖(谨慎使用) - 大文件或大量文件上传耗时较长,函数内的
cat语句会实时输出上传进度 - 确保Google Drive账户有足够的存储空间和操作权限
内容的提问来源于stack exchange,提问作者James Hirschorn
相关产品推荐
相关产品推荐

