在r中查找文件所有者

j2cgzkjk  于 2023-11-14  发布在  其他
关注(0)|答案(2)|浏览(104)

有各种各样的基本功能来获取有关文件的信息。现在我正在使用免费软件SearchMyFiles来做到这一点。然而,我更喜欢用r来做。
我想在我的硬盘驱动器中搜索特定类型的文件夹,然后我想将这些文件夹中找到的文件的路径和信息返回到数据框,更具体地说,由于文件具有不同的所有者,我想返回文件的所有者。
我尝试的函数是file.info()list.files()
但是,file.info(path, extra_cols = TRUE)不会返回文件的所有者。相反,它返回以下内容:

size isdir  mode mtime               ctime               atime               exe
10689 FALSE  666  2017-03-01 12:00:47 2017-03-01 12:00:47 2017-03-01 12:00:47  no

字符串
1)有没有办法通过file.info()找到失主
2)是否有一种简洁的方法来搜索所有具有特定名称的文件夹,并返回有关这些文件夹中找到的文件的信息?

list.files(path_to_harddrive, folder_string) %>%
file.info()


This question解决了这个问题,但没有任何可接受的答案。

> as.data.frame(Sys.info())
                               Sys.info()
sysname                           Windows
release                             7 x64
version        build 7601, Service Pack 1
machine                               x86

rkue9o1l

rkue9o1l1#

提供的答案不是平台独立的,对我来说在Windows网络驱动器上不起作用。
我想出了这个代码,如果不在Windows上,它使用fs包(由RStudio Team提供),否则就是一个可怕的丑陋脚本。Windows可以使用带有/Q标志的批处理命令dir检索所有者。
这样做的工作:

get_owner <- function(path) {
  if (Sys.info()["sysname"] == "Windows") {
    dir <- shell(paste0('dir /Q "', path, '"'), intern = TRUE)
    if (tools::file_ext(basename(path)) == "") {
      # it's a folder
      return(gsub(".*<DIR>[ \t]+([^ ]*).*", "\\1", dir[grepl("<DIR>", dir)][1]))
    } else {
      # it's a file
      return(trimws(gsub(basename(path), "",
                         gsub("^[0-9: \t.-]+", "",
                              dir[grepl(basename(path), dir)]),
                         fixed = TRUE)))
    }
  } else {
    return(fs::file_info(path)$user)
  }
}

字符串
然后像这样使用:

get_owner("/Folder/Folder")
get_owner("/Folder/File")
get_owner("C:/Folder/Folder")
get_owner("C:/Folder/File")

t9eec4r0

t9eec4r02#

让文件所有者进入一个框架,类似于;

library(tidyverse)
data <- tibble(path = list.files(path_to_harddrive, folder_string)) %>%
    mutate(user = file.info(path)$uname)

字符串
这对我来说似乎很慢,所以我想有一个更快的方法!

相关问题