【问题标题】:Is there an R function to change file ownership?是否有 R 函数来更改文件所有权?
【发布时间】:2016-01-21 15:06:51
【问题描述】:

如何从 R 更改文件的所有权?我想我可以使用system 并直接针对字符串调用chown,但我想知道是否有更好的方法。

【问题讨论】:

  • 一些系统相关的函数是Sys.*(例如Sys.chmod())但是base中没有chown的函数。
  • 你可以将命令输入?system,但我猜你必须适应当前的操作系统。

标签: r linux chown


【解决方案1】:

正如 cmets 中已经提到的,函数 Sys.chown() 不存在。我写了一个函数来为我完成这项工作。与Sys.* 类型的其他函数相比,这个函数的缺点是chown 需要sudo。将sudo 与R 的system() 一起使用不起作用,但this answer 建议使用gksudo,这对我来说很好。

所以这是函数定义:

Sys.chown <- function(paths, owner = NULL, group = NULL) {

   # create string for user:owner
   if (!is.null(group)) {
      og <- paste0(owner, ":", group)
   } else {
      og <- owner
   }

   # create string with files
   files <- paste(paths, collapse = " ")

   # run command
   system(paste("gksudo chown", og, files))

   invisible()
}

第一部分创建设置所有者和组的字符串,其格式应为owner:group。但是,可以省略这些参数中的一个或两个,并且该函数会处理所有可能性。

接下来是提供给paths 的所有文件名都放入单个字符串的部分。

最后,system() 用于对chown 进行实际调用。 gksudo 将打开一个对话窗口并询问密码。不幸的是,每次都必须输入密码。

chown 有几个有用的选项,Sys.chown() 的更好实现应该能够处理其中的一些。

示例

system("ls -l")
## total 0
## -rw-rw-r-- 1 user1 user1 0 Jan 21 19:32 test2.file
## -rw-rw-r-- 1 user1 user1 0 Jan 21 19:32 test.file
Sys.chown("test.file", owner = "user2")
Sys.chown("test2.file", group = "user2")
system("ls -l")
## total 0
## -rw-rw-r-- 1 user1 user2 0 Jan 21 19:32 test2.file
## -rw-rw-r-- 1 user2 user1 0 Jan 21 19:32 test.file
Sys.chown("test.file", owner = "user1", group = "user2")
system("ls -l")
## total 0
## -rw-rw-r-- 1 user1 user2 0 Jan 21 19:32 test2.file
## -rw-rw-r-- 1 user1 user2 0 Jan 21 19:32 test.file
Sys.chown(dir(), owner = "user1", group = "user1")
system("ls -l")
## total 0
## -rw-rw-r-- 1 user1 user1 0 Jan 21 19:32 test2.file
## -rw-rw-r-- 1 user1 user1 0 Jan 21 19:32 test.file

【讨论】:

  • afaik,你可以在R的系统命令中使用sudo,你需要做sudo -ks &lt;command&gt;然后通过输入提交密码。但是你应该小心这一点,因为密码将在命令中,可以从 ps...etc... 中查看。
猜你喜欢
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
  • 2017-01-05
  • 2017-01-08
  • 2014-08-11
相关资源
最近更新 更多