设置多个文件的创建日期属性 [英] Setting the attribute on the creation date of multiple files
本文介绍了设置多个文件的创建日期属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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。然后把你的文件放在你想用来设定日期的地方。
最后,使用文件的名称和日期创建名为df
的tibble
。
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
%sdffiles
与df
联接。
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屋!
查看全文