我有一个非常复杂的文件夹组织,这里是它的简化版本。
|--Folder0 --- Folder0.1
|
home---|--Folder1 --- Folder1.1 --- Folder1.2
|
|--Folder2 --- Folder2.1
我想从第二级文件夹(Folder0.1,Folder1.1,Folder2.1)列出所有.xlsx文件。
任何帮助真的很感激。
**请不要将文件夹的名称视为理所当然。为了简单起见,我这样称呼他们。**他们的名字是随机的。
3条答案
按热度按时间ffx8fchx1#
list.files(recursive=)
不允许立即限制,我建议三种路径:1.获取全部,在文件分隔符(通常为
/
)上拆分,并限制列表。由于它可能以
"."
开头,因此您可能需要比您认为的更多的一个。在这里尝试使用6
以获得您所需要的。1.如果它只有几个深度,那么手动构造目录列表并完全禁用
recursive
。(不可否认的是,测试不足,不太棒,但这是一个方法的开始。
1.使用
system("find . -maxdepth 5 -type f", intern=TRUE)
或类似的方法来生成文件名。dw1jzc5e2#
调用
list.files(recursive = TRUE)
然后过滤结果是一种有效的方法,但是它容易出错,并且不能很好地随递归所经过的文件系统树的大小和深度而扩展。我会考虑调用你的操作系统提供的命令行实用程序之一,你可以通过R的
system
和system2
来做。例如,在Unix上,您可以简单地执行以下操作:将
n
替换为你想要的递归深度。这种方法的一个优点是find
是高度优化的,并且比list.files
有更多的选项。另一个可扩展的选择是编写自己的递归函数,在您想要的地方停止。下面是一个可能性,你可能应该比我测试更多。
然后又道:
再次将
n
替换为所需的递归深度。50few1ms3#
在受到这个问题的启发后,我想加入一个类似于Mikael Jagan解决方案的解决方案:list files recursive up to a certain level in R我做了一个函数来从特定的深度列出文件夹。
例如,我有一个文件夹结构设置列表,
使用此函数得到
list_dir_n_depth("PATH/TO/YOUR/DIR", depth_keep = 3)
和组合得到所有的xlsx下的文件夹级别3
为了让xlsx更上一层楼
注意,在
list.files
中设置full.names = T
以获取文件的完整路径例如,如果只想保留
fd21
文件夹中的xlsx,可以从stringr
中选择grep
或str_subset
来进一步过滤结果吗?