You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言递归查找指定格式2022年创建文件,file.info过慢求优化

优化R语言查找指定创建日期文件的方案

针对你遇到的file.info处理大量文件耗时过长的问题,有两个更高效的实现思路:

一、利用系统原生命令直接过滤(最快方案)

直接通过系统命令在查找文件时就完成命名规则+创建日期的双重过滤,避免先拉取所有文件再二次处理,速度提升最明显。

Windows系统

使用dir命令递归查找,同时筛选2022年创建的文件:

workdir2 <- "C:/Users/<user>/folder"
# 调用Windows dir命令,输出符合条件的完整路径
filelist <- system2(
  command = "cmd.exe",
  args = c("/c", sprintf('dir "%s\\DATA_*.xlsx" /s /b /tc | findstr "2022"', workdir2)),
  stdout = TRUE
)
  • /s:递归查找子目录
  • /b:只输出文件路径
  • /tc:按创建日期筛选(如果要按修改日期用/tw)
  • findstr "2022":过滤日期包含2022的结果

Linux/macOS系统

使用find命令结合时间范围筛选:

workdir2 <- "/Users/<user>/folder"
# 调用find命令,查找2022年创建的文件
filelist <- system2(
  command = "find",
  args = c(workdir2, "-type", "f", "-name", "DATA_*.xlsx", "-newermt", "2022-01-01", "!", "-newermt", "2023-01-01"),
  stdout = TRUE
)
  • -newermt 2022-01-01:匹配2022年1月1日之后创建的文件
  • ! -newermt 2023-01-01:排除2023年1月1日之后创建的文件,最终得到2022全年的文件

二、使用fs包替代base R的file.info

fs包是专门为文件系统操作优化的R包,底层用C实现,比base R的file.info快得多:

  1. 先安装并加载依赖包:
install.packages(c("fs", "lubridate"))
library(fs)
library(lubridate)
  1. 查找文件并筛选日期:
workdir2 <- "C:/Users/<user>/folder"
# 递归查找符合命名规则的文件
filelist <- dir_ls(workdir2, regexp = "^DATA_.*\\.xlsx$", recurse = TRUE)
# 获取创建日期并筛选2022年的文件
file_2022 <- filelist[year(file_create(filelist)) == 2022]
  • dir_ls:功能类似list.files,但性能更优
  • file_create:快速获取文件创建时间,返回POSIXct格式
  • year():从日期中提取年份,由lubridate包提供

内容的提问来源于stack exchange,提问作者megmac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:45:40