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

如何用R随机修改文件的创建与修改日期?

修改文件创建日期(ctime)并随机设置日期的R解决方案

首先得明确:R原生的Sys.setFileTime()只能修改文件的修改时间(mtime)和访问时间(atime),没办法直接修改创建时间(ctime)——因为ctime属于文件系统级别的元数据,需要调用对应系统的命令行工具来修改。下面分平台给你适配的方案,同时满足你「一年内随机设置不同创建/修改日期」的需求。


1. 核心思路:结合系统命令修改ctime

不同操作系统修改创建时间的命令不一样,我们可以写一个跨平台的R函数来封装这些命令,再结合随机日期生成逻辑批量处理文件。


2. 跨平台修改创建时间的R函数

先定义一个通用函数,自动识别操作系统并调用对应命令:

set_creation_time <- function(file_path, creation_date) {
  # 统一将日期转为POSIXct格式
  creation_date <- as.POSIXct(creation_date)
  
  if (.Platform$OS.type == "windows") {
    # Windows用PowerShell修改创建时间
    ps_date_str <- format(creation_date, "%Y-%m-%d %H:%M:%S")
    cmd <- sprintf('powershell -Command "(Get-Item \'%s\').CreationTime = \'%s\'"', 
                   file_path, ps_date_str)
    system(cmd, invisible = TRUE)
  } else if (Sys.info()["sysname"] == "Darwin") { # macOS系统
    # macOS需要Xcode命令行工具,先运行xcode-select --install安装
    mac_date_str <- format(creation_date, "%m/%d/%Y %H:%M:%S")
    cmd <- sprintf('SetFile -d "%s" "%s"', mac_date_str, file_path)
    system(cmd, invisible = TRUE)
  } else { # Linux系统
    # Linux修改ctime需要root权限,操作前请备份数据!
    # 先获取当前的atime和mtime,避免修改ctime后被覆盖
    file_info <- file.info(file_path)
    atime_str <- format(file_info$atime, "%Y%m%d%H%M.%S")
    mtime_str <- format(file_info$mtime, "%Y%m%d%H%M.%S")
    ctime_str <- format(creation_date, "%Y%m%d%H%M.%S")
    
    # 使用debugfs修改ctime(需要替换/dev/sda1为你的根分区设备)
    cmd_ctime <- sprintf('sudo debugfs -w -R "set_inode_field %s ctime %s" /dev/sda1', 
                         file_path, ctime_str)
    # 同步atime和mtime
    cmd_atime <- sprintf('touch -a -t %s "%s"', atime_str, file_path)
    cmd_mtime <- sprintf('touch -m -t %s "%s"', mtime_str, file_path)
    
    system(cmd_atime, invisible = TRUE)
    system(cmd_mtime, invisible = TRUE)
    system(cmd_ctime, invisible = TRUE)
  }
}

3. 批量随机设置日期的完整脚本

接下来结合你的需求,生成2020年全年内的随机日期,为每个文件设置不同的创建和修改时间(确保创建时间≤修改时间,符合真实逻辑):

# 替换为你的目标文件夹路径
target_folder <- "C:/Users/cariou-w/Nextcloud/sync-uncloud/1920-1921/master/web_scrapping/plans"

# 获取文件夹内所有文件的完整路径
file_list <- list.files(target_folder, full.names = TRUE)

# 定义日期范围:2020年全年(精确到分钟)
start_dt <- as.POSIXct("2020-01-01 00:00:00")
end_dt <- as.POSIXct("2020-12-31 23:59:59")

# 批量处理每个文件
sapply(file_list, function(file) {
  # 生成随机创建时间(2020年内任意分钟)
  random_ctime <- sample(seq(start_dt, end_dt, by = "min"), 1)
  # 生成随机修改时间:必须晚于或等于创建时间
  random_mtime <- sample(seq(random_ctime, end_dt, by = "min"), 1)
  
  # 修改文件修改时间(用你熟悉的Sys.setFileTime)
  Sys.setFileTime(file, random_mtime)
  # 修改文件创建时间
  set_creation_time(file, random_ctime)
  
  # 可选:打印处理日志,方便验证
  cat(sprintf("已处理:%s\n创建时间:%s\n修改时间:%s\n\n", 
              basename(file), random_ctime, random_mtime))
})

4. 注意事项

  • Windows:无需额外安装工具,PowerShell默认可用;
  • macOS:需要先安装Xcode命令行工具,终端运行xcode-select --install完成安装;
  • Linux:修改ctime需要root权限,且/dev/sda1需要替换为你的系统根分区设备(可以用df /查看),操作前请务必备份文件,避免损坏文件系统;
  • 如果你只需要按天随机,把by = "min"改成by = "day"即可;
  • 逻辑合理性:设置修改时间时确保不早于创建时间,避免出现不符合常识的文件时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:12:50