我想在
ls
中做相当于 R
的事情。
假设我想要 ls /a/b/c/201*/*/d/e/f/*/sameNameFile.gz
,这个命令需要 5 秒才能在终端上运行,我尝试使用 list.files
,但它需要 path
参数并且需要 recursive=TRUE
。这需要很长时间...
是否有一个我可以使用的函数(或
list.files
的选项)允许我运行这个ls
命令(我知道我可以使用system(cmd,intern=TRUE)
运行comamnd本身,但我想要一个R解决方案)
相关问题的结果
在某些系统上,
system("ls -f -R", intern = TRUE)
比list.files
更快。您的表现可能会有所不同。
-R
开关表示递归; -f
开关意味着不按字母顺序排序,这就是性能增益的来源。
作为 @Richie Cotton 答案的替代方案,一个好的、快速的解决方案是使用
shell
函数和系统命令 find
。
这将为您提供文件的完整路径,并且是递归的!
folder <- "path/to/folder/"
files <- shell(paste("find -L", folder, "-name 'search_pattern'"),
intern = T)
为了使命令正确运行,以“
/
”结束搜索起始文件夹路径非常重要。使用 R 基本函数时,默认情况下不会附加此值 file.path()
。
-L
标志的存在是为了解决路径中可能的符号链接。