楚新元 | All in R

Welcome to R Square

用 R 自动整理不同类型的文件

楚新元 / 2021-10-15


这里我们先分别创建 3 个 Excel 和 Word 文档作为示例数据,然后实现两类型的文件分别放在 xlsx 和 docx 文件夹内。

# data 文件夹下创建示例文件
dir.create("data")
x = outer(1:3, c("xlsx", "docx"), FUN = paste, sep = ".")
file.create(paste0("./data/", x))

# 编写整理路径下文件的函数
tidy_file = \(path) {
  # 获取文件后缀
  path %>% 
    list.files(recursive = TRUE) %>% 
    tools::file_ext() %>% 
    unique() -> files_ext
  # 根据后缀建立文件夹
  files_ext %>% 
    paste0(path, "/", .) %>% 
    fs::dir_create()
  # 根据文件类型移动文件
  for (i in files_ext) (
    path %>% 
      fs::dir_ls(glob = paste0("*.", i), recurse = TRUE) %>% 
      fs::file_move(paste0(path, "/", i))
  )
}

# 整理给定文件夹
tidy_file("./data")
更新 2024-11-15

关于文件的移动(从 fullname 的角度看,应该理解为重命名),分组后再移动是没有必要的,计算机在执行过程中实际上还是逐个逐个地执行,因此对上面的 tidy_file 函数的代码更新如下:

library(fs)
tidy_file = \(path) {
  # 获取文件列表
  files = dir_ls(path, recurse = TRUE, type = "file")
  # 获取文件后缀
  files_ext = tools::file_ext(files)
  # 根据后缀建立文件夹
  path |>  
    paste0("/", unique(files_ext)) |> 
    dir_create()
  # 批量移动文件
  file_move(
    files, paste(path, files_ext, basename(files), sep = "/")
  )
}