与R中的MD5递归文件列表

问题描述 投票:0回答:1

我想创建R中一个简单的CSV表格输出包含通过目录(递归)只有文件的列表。输出应包含最低3列:

  • 完整路径(例如\路径\为\文件\ somefile.txt)
  • 文件大小
  • 文件的MD5哈希
  • (附加file.info属性(数据创建,修改等)将是有益的,但不是绝对必要

我有以下脚本,我从互联网上,它适用于各种场所砍死在一起,但我觉得是不是“最好”的方式做到这一点和/或可能是易碎的。我寻求/建议的任何意见如何清洁起来,有助于提高我的R-技能。谢谢!

*我特别关心的是如何工作的cbind,以及它是如何“知道”如果排排/顺序被保存?

    library(digest)
library(tidyverse)
library(magrittr)

test_dir <- "C:\\Path\\To\\Folder"
outfile <- "out.csv"

file.names <- list.files(test_dir, recursive = TRUE, full.names = TRUE)

md5s <- sapply(file.names, digest, file = TRUE, algo = "md5")

q <- map(file.names, file.info)

file.sizes <- map_df(q, extract, c("size"))

output <- cbind(file.names, file.sizes, md5s)

write_csv(output, str_c("./R/", outfile))
r
1个回答
1
投票

一个技巧可能是使用的openssl MD5函数而不是digest的。

library(openssl)

md5s <- md5(file.names)

它已经矢量化,所以你不会需要使用sapply这可以提高你的处理速度(取决于你想有一个文件有多大散列)。

在cbind方面,它会让你绑定到使用密钥(MD5),所以输出将有file.names有顺序的第一列的顺序。

© www.soinside.com 2019 - 2024. All rights reserved.