是否有更改文件所有权的 R 函数?
Is there an R function to change file ownership?
如何从 R 更改文件的所有权?我想我可以使用 system
并直接针对字符串调用 chown
,但我想知道是否有更好的方法。
正如评论中已经提到的,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
将打开一个对话框 window 并询问密码。不幸的是,每次都必须输入密码。
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
如何从 R 更改文件的所有权?我想我可以使用 system
并直接针对字符串调用 chown
,但我想知道是否有更好的方法。
正如评论中已经提到的,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
将打开一个对话框 window 并询问密码。不幸的是,每次都必须输入密码。
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