文件交换

图像缩略图

递归AddPath.

1.6.0.0版(3.54 kB) 安东尼肯德尔
递归地将目录添加到MATLAB路径,可选择忽略一些

7下载

更新2009年11月4日

查看版本历史记录

查看许可证

这是一个非常简单的函数,它将添加指定目录下面的所有目录(或者如果没有指定,如果没有指定的则),则可以选项忽略指定的目录列表。任何忽略的目录(例如,'.svn'和'cvs'如果使用版本控件)也不会添加它们的子目录。

这是一个快速,非常轻的 - 且易于修改的 - 功能,应在任何平台上工作(未明确测试)。我使用它来添加未存储在Matlab的工具箱文件夹中的工具箱的目录树,以及从SVN和CVS源控制存储库中检查的模块。

每个审阅者的建议和评论,这现在忽略了私有目录,重载的方法目录,以及无需指定其他目录的隐藏目录。它还接受标志,如“AddPath”中,以将目录放在路径的开头或结尾。

此功能的添加(12/01/2008)是它在“反向”中运行的能力,递归地从路径中删除目录。例如,在使用代码存储库的多个副本时,此功能可能非常有用。此外,我修复了审阅者提到的错误,该错误可以在没有扩展的情况下正确处理文件。

由于用户的广泛帮助(Joe McDonnell),此功能几乎完全重写,更好的错误检测,更高效的操作(更快运行时,即使是大目录树),则是一个扩展调试模式,列出了功能的所有功能做,更好的帮助。此外,默认情况下,现在忽略“CVS”目录。

另一个用户(Jim)提出了一个建议,它导致中等尺寸目录树中大约3倍的速度增加(这应该随着较大的尺寸树)。此外,对MAC兼容性进行了小的变化。

引用

安东尼肯德尔(2021年)。递归AddPath.(//www.tatmou.com/matlabcentral/fileexchange/21086-recursive-addpath),matlab中央文件交换。检索到

评论和评级(20.

罗宾

这应该是标准的;)

克里斯·詹森

我仍然发现这个功能有用。但是,在它的目前形式中,它会导致控制台警告时。包文件夹(以'+'开头)被拾取。

要解决此问题,我插入了两个快速线条(我包含两行原版参考):

%构建目录列表
caaddremdirs = {};
[caaddremdirs] = addpath_recurally(caaddremdirs,strstartdir,castrsignoredirs,strxorintaddpathmode,blnremdirs,blndebug);

%KJ:查找所有模块DIRS(名称中的“+”)。
matches = strfind(caaddremdirs,'+');
%保留文件夹,没有匹配'+'
caaddremdirs = caaddremdirs(cellfun(@ iSempty,matches));

警告走了!

大卫G.

卓越!

米格尔

珍珠

安东尼肯德尔

谢谢吉姆!

我用mac兼容,我做了改变。此外,基于10月份的第一次评论,我将代码的速度提高了一个中等大小的目录树中的3倍。

吉姆·霍本

看来我无法弄清楚如何工作这个评论系统。最后一篇文章的要点是代码在Mac上运行为strstardir \ *。不起作用,它只返回。和 ..

吉姆·霍本

哎呀,第二部分应该阅读:
sasubdirs = dir(strstartdir);
sasubdirs = sasubdirs([sasubdirs.isdir]);

吉姆·霍本

吉姆·霍本

只是为了澄清最后一点,保留所有目录的单元格数组来处理,然后使用AddPath(Pathsout {:},strxorintaddpathMode)(其中路径out是要添加的所有路径的单元格数组)

Sven.

您可以避免在第59行中添加以下内容提到上面提到的第一个错误:
curdir = curdir([curdir.isdir]);

哦,我刚刚在GenPath中检查过,并看到它使用递归调用'dir'。因此,我的第二个建议实际上并没有避免这些多个电话!

Sven.

谢谢这个非常有用的功能。我有两个主要评论:
1.我认为如果在目录中没有任何扩展名的文件,则会导致函数崩溃功能。例如,有些人提交包含名为“Readme”的文件的文件交换包。您的功能在此案例上失败(此刻)。

2.我还没有检查过,但也许这可以在不使用递归函数的情况下重写。我认为如果您只需使用GenPath来获取目录列表,则可以一次过滤此列表。这可能会更快。

漂亮的功能!

Thierry Dalon.

请注意:您正在使用断言功能。这在R14或之前没有提供这一点!
此外,我不确定断言退出函数...

Thierry Dalon.

在这个新的fx中无法改变评级...对不起之前的评级。
我认为现在这是一个非常有用的文件。谢谢你更新!
最后一个建议:我会考虑脚本中可能的默认值。例如,如果没有忽略输入参数使用Ignore = {'.svn'},则用户可编辑,以便用户可以简单地调用您的文件而不传递忽略选项,如果它们具有归功的默认值,则忽略选项。

Thierry Dalon.

Thierry Dalon.

@author:忽略选项的想法很好。
如果您也可以直接通过忽略过滤器,如“启动wih”@“或”#“的所有目录都可以直接传递。最好的是通用通配符表达式。
小缺失点:您的实现不允许使用-begin and-end的addpath Interinsec选项。
您从原始Matlab GenPath中删除了一些功能,使您的版本未进行优化。(默认情况下(私有和@未忽略;您的循环也运行所有文件!)
------
@Jesse:这可以在代码中使用小校正来完成:
如果〜任何(strcmp(curdir(m).name,{'。','..',忽略{:}}))&& curdir(m).isdir &&〜strncmp(currdir(m).name,'@',1)&&〜任何(strcmp(strdir(m).name,{'private','。','。')...
(另见原始GenPath)

Jesse Hopkins.

工作非常好,但它不会自动忽略“私有”目录和“@”目录,如GenPath所做的。您可以轻松地将“私有”添加到忽略目录列表中,但是能够跳过所有“@”目录需要一些代码更改。

安东尼肯德尔

GenPath无法忽略目录,这是某些用途的关键功能(如源代码存储库)。这是这个功能的真正效用。

B. Roossien.

AddPath(GenPath())有什么问题?

Matlab释放兼容性
用R2008a创建
兼容任何释放
平台兼容性
视窗 苹果系统 Linux.
致谢

启发:genpath_exclude

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!