高效的list.files

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

我想在

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解决方案)

r system
2个回答
9
投票

相关问题的结果

快速测试目录是否为空

在某些系统上,

system("ls -f -R", intern = TRUE)
list.files
更快。您的表现可能会有所不同。

-R
开关表示递归;
-f
开关意味着不按字母顺序排序,这就是性能增益的来源。


0
投票

作为 @Richie Cotton 答案的替代方案,一个好的、快速的解决方案是使用

shell
函数和系统命令
find
。 这将为您提供文件的完整路径,并且是递归的!

folder <- "path/to/folder/"
files <- shell(paste("find -L", folder, "-name 'search_pattern'"),
             intern = T)

为了使命令正确运行,以“

/
”结束搜索起始文件夹路径非常重要。使用 R 基本函数时,默认情况下不会附加此值
file.path()

-L
标志的存在是为了解决路径中可能的符号链接。

引用搜索模式很重要,否则搜索将无法正确递归。

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