图片缩略图

subdir:递归文件搜索

版本1.1.0.0(3.87 KB)由 凯利·卡尼
使用与dir函数相同的输入和输出格式执行递归文件搜索
4.7
15级

19下载

更新2016年8月16日

从GitHub

查看版本历史记录

在GitHub上查看许可证

此函数执行递归文件搜索。与其他提供相同功能的FEX程序相比,它的优势在于它使用与Matlab的dir函数相同的输入和输出格式,因此可以互换使用。
例子:

>>a=subdir(fullfile(matlabroot,'toolbox','matlab','*.mat'))

a=

带字段的66x1结构数组:
名称
日期
字节
isdir
达特纳姆

> > (1)

ans=

名称:'/Applications/MATLAB74/toolbox/matlab/audiovideo/chirp.mat'
日期:2004年3月14日10:31:48
字节:25276
isdir:0
datenum: 7.3202 e + 05

引用为

凯利·卡尼(2021年)。subdir:递归文件搜索(https://github.com/kakearney/subdir-pkg),GitHub。恢复.

意见及评分(19)

尼科莱·约根森

作品精彩绝伦!

凯利·卡尼

dir函数在R2016b中获得了搜索子目录的能力,此时它也开始返回它列出的每个文件的父文件夹。在此之前,它没有返回文件夹,也没有进行递归搜索。所以对于较新的版本,你最好使用dir;这个函数填补了早期版本的空白。

桑克特乌哈酒店

很好的释放。我在函数中修改的唯一一件事是将Files.name保留为唯一的文件名,而不是返回与“dir”函数的输出完全匹配的完整路径。它在Files.name下返回了每个文件的完整路径,还返回了文件夹名称,这让它感到多余。

约瑟夫·斯莱顿

Kelly,如果您的文件夹名称中有分号,则会出现错误,这在Windows文件系统中是合法的。由于这也是Windows系统中的“pathsep”,它会错误地拆分pathstr。我的修复程序将第88行更改为:
pathfolders=regexp(路径str,[pathsep-pathsep],'split');

第146行到第152行:

对于i=1:长度(dirs)
dirname=dirs(i).name;
如果~ strcmp(目录名 ,'.') && ~ 比较字符串(目录名,“. .”)
p=[p路径sep genpath(fullfile(d,dirname))];%递归调用此函数。
终止
终止
p=[p路径sep];

凯利·卡尼

@卢卡,

感谢您指出这一点;似乎我在合并./…-修剪代码时意外引入了该错误。现已修复。

卢卡

它抛出一个错误,当选择一个文件夹与错误的扩展:
“来自非结构数组对象的结构内容引用。
子目录错误(第103行)
[~, ~, tail] = cellfun(@fileparts, {Files(:).name}, 'UniformOutput', false);"

谢谢你,非常好用,你教会了我们新的东西!

bilalY

库尼

保罗

太好了!照它说的做。

桑杰

效果非常好。又好又方便。

布伦丹

这正是我们要找的。我们想要一些东西来无缝地替换其他人代码中的'dir'命令,它就像宣传的那样工作。节省了我同事的工作时间。在执行之后,我们必须修剪output.name字段以只包含到当前目录的相对路径,而不是完整路径。

拉什·科塔里

惊人的! !这正是我想要的!非常感谢:D

迈克尔

非常有用的工具!我喜欢它的简单。谢谢!

布拉德·斯蒂里茨

太好了!正是我需要的。非常感谢,谢谢:)

凯利·卡尼

德里克,

我认为你的意见必须适用于不同的意见;您提到的行不是这里提供的文件的一部分。这个版本应该是完全独立于平台的(并且是在Mac上开发的,所以如果有任何偏向Mac/Unix的话)。

德里克。

这个文件中有一个小问题很容易解决。此脚本仅在windows上工作,因为在第25行:
d=[d;{[rootpath'\'dnew(i.name]}];
和46行:
d=[d;{[dtemp'\'dnew(i.name]}];

反斜杠是仅用于Windows的文件分隔符,对于unix/linux,这将导致问题,因为文件分隔符为“/”。使用filesep而不是“\”可以很容易地解决此问题。即。:
d = [d;{[rootpath filesep dnew(我). name]}];
d = [d;{[dtemp filesep dnew(我). name]}];

拉杰索迪

它太棒了!。

>> a = subdir([pwd '\*level1*.csv'])

a=

19x1 struct array with fields:
名称
日期
字节
isdir
达特纳姆

当我开始使用它时,我唯一的问题是它确实需要一个扩展。

>>a=细分([pwd'\*level1*']))
???未定义函数或变量“filter”。

90处的==>subdir中出错
NewFiles = dir(fullfile(pathfolders{folder}, filter));

>>

我开始进行故障排除,并意识到var过滤器从未在第71行或第74行定义过。

谢谢你的文件!非常优雅的代码。

你的,

拉吉

MATLAB版本兼容性
创建R14SP3
与任何版本兼容
平台兼容性
窗户 macOS Linux

社区寻宝

在MATLAB Central中查找宝藏,了解社区如何帮助您!

开始狩猎!

细分