设置多个文件的创建日期属性 [英] Setting the attribute on the creation date of multiple files

查看:18
本文介绍了设置多个文件的创建日期属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有人能帮我完成下面的任务。我有很多从一个非常不寻常的控制系统中提取的小文本文件。当我传输文件时,我只收到文件的内容。不幸的是,我以这种方式失去了所有的属性。而我最关心的是创世日期。我设法(使用相机和OCR程序)实现了这样一个事实:我已经有了一个表,其中包含文件的名称和正确的创建日期。具体如下:

library(tidyverse)
library(lubridate)

df = tibble(
  Name = c("name1.mpf", "name2.mpf", "name3.mpf", "name4.mpf", "name5.mpf"),
  Date = c("12/04/1997", "04/06/1998", "21/08/1998", "22/08/1998", "05/09/1999")
)

df = df %>% mutate(Date = dmy(Date))
不幸的是,我不知道如何在R中设置这些文件的创建日期。我在R中是初学者。 如有任何建议,我们将不胜感激。

我有数百个文件。

推荐答案

这样做。首先在RStudio中创建一个项目(我假设您现在正在使用RStudio),然后在项目目录中创建一个新文件夹,简称为Folders。然后把你的文件放在你想用来设定日期的地方。 最后,使用文件的名称和日期创建名为dftibble

library(tidyverse)
library(lubridate)
library(fs)

df = tibble(
  fileName = c("name1.mpf", "name2.mpf", "name3.mpf", "name4.mpf", "name5.mpf"),
  fileDate = c("12/04/1997", "04/06/1998", "21/08/1998", "22/08/1998", "05/09/1999")
)

df = df %>% mutate(fileDate = dmy(fileDate))

现在您需要两个附加函数。如果你什么都不懂,也不要担心。这些功能经过验证和测试,工作正常。

fGetInfo = function(file) file %>% file.info() %>% as_tibble()
fsetFileTime = function(data){ 
  data %>% mutate(
    result = case_when(
      is.na(fileDate) ~ "Missing date",
      !file_exists(file) ~ "File dont exist",
      TRUE ~ tryCatch(
        {
          res = "Error"
          if(Sys.setFileTime(file, fileDate)) res = "Date changed"
          res
        }, error = function(msg) res
      )
    )
  )
}

是时候使用第一个属性来读取文件属性了。

dffiles = tibble(
  file = dir_ls("Folder", regexp = "."),
  fileName = file %>% path_file(),
  id = 1:length(file)
) %>% 
  mutate(info = map(file, fGetInfo)) %>% 
  unnest(info)
dffiles

输出

# A tibble: 7 x 10
  file             fileName     id  size isdir mode      mtime               ctime               atime               exe  
  <fs::path>       <chr>     <int> <dbl> <lgl> <octmode> <dttm>              <dttm>              <dttm>              <chr>
1 Folder/name1.mpf name1.mpf     1   452 FALSE 666       2021-08-03 02:00:00 2021-10-20 19:19:55 2021-10-20 19:19:55 no   
2 Folder/name2.mpf name2.mpf     2   452 FALSE 666       2021-08-03 02:00:00 2021-10-20 19:20:30 2021-10-20 19:20:30 no   
3 Folder/name3.mpf name3.mpf     3   452 FALSE 666       2021-08-03 02:00:00 2021-10-20 19:20:29 2021-10-20 19:20:29 no   
4 Folder/name4.mpf name4.mpf     4   452 FALSE 666       2021-08-03 02:00:00 2021-10-20 19:20:33 2021-10-20 19:20:33 no   
5 Folder/name5.mpf name5.mpf     5   452 FALSE 666       2021-08-03 02:00:00 2021-10-20 19:20:32 2021-10-20 19:20:32 no   
6 Folder/name6.mpf name6.mpf     6   452 FALSE 666       2021-08-03 02:00:00 2021-10-20 19:20:32 2021-10-20 19:20:32 no   
7 Folder/name7.mpf name7.mpf     7   452 FALSE 666       2021-08-03 02:00:00 2021-10-20 19:20:31 2021-10-20 19:20:31 no   

如您所见,我的文件夹中有7个文件(有意多于df中的文件),它们都有今天的日期。 现在我们需要将tibble%sdffilesdf联接。

dffiles = dffiles %>% left_join(df, by="fileName") 
dffiles%>% 
  select(c(file, fileName, fileDate))

输出

# A tibble: 7 x 3
  file             fileName  fileDate  
  <fs::path>       <chr>     <date>    
1 Folder/name1.mpf name1.mpf 2021-08-03
2 Folder/name2.mpf name2.mpf 2021-08-03
3 Folder/name3.mpf name3.mpf 2021-08-03
4 Folder/name4.mpf name4.mpf 2021-08-03
5 Folder/name5.mpf name5.mpf 2021-08-03
6 Folder/name6.mpf name6.mpf NA        
7 Folder/name7.mpf name7.mpf NA  

最后,除了为适当的文件设置日期外,没有其他操作。

dffiles = dffiles %>% group_by(id) %>% 
  nest(data=c(file, fileDate)) %>% 
  mutate(data = map(data, ~fsetFileTime(.x))) %>% 
  unnest(data) %>% 
  mutate(result = result %>% factor()) 
dffiles %>% 
  select(c(file, fileName, fileDate, result))

输出

Adding missing grouping variables: `id`
# A tibble: 7 x 5
# Groups:   id [7]
     id file             fileName  fileDate   result      
  <int> <fs::path>       <chr>     <date>     <fct>       
1     1 Folder/name1.mpf name1.mpf 1997-04-12 Date changed
2     2 Folder/name2.mpf name2.mpf 1998-06-04 Date changed
3     3 Folder/name3.mpf name3.mpf 1998-08-21 Date changed
4     4 Folder/name4.mpf name4.mpf 1998-08-22 Date changed
5     5 Folder/name5.mpf name5.mpf 1999-09-05 Date changed
6     6 Folder/name6.mpf name6.mpf NA         Missing date
7     7 Folder/name7.mpf name7.mpf NA         Missing date

如你所见,一切都很顺利!

无论您有多少个文件,都祝您更改所有文件的日期!!

这篇关于设置多个文件的创建日期属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆