- http://www.mathworks.com/matlabcentral/fileexchange/32993-lsmod
- http://www.mathworks.com/matlabcentral/fileexchange/32226-recursive-directory-listing-enhanced-rdir
- http://www.mathworks.com/matlabcentral/fileexchange/32036-dirwalk-walk-the-directory-tree
- http://www.mathworks.com/matlabcentral/fileexchange/24567-searchfile
- http://www.mathworks.com/matlabcentral/fileexchange/2118-getfilenames-m
- http://www.mathworks.com/matlabcentral/fileexchange/21791-search-files-recursively-dir2
- http://www.mathworks.com/matlabcentral/fileexchange/15505-recursive-dir
Listing files in an arbitrarily named and deep tree
2 次查看(过去 30 天)
显示 更早的评论
Hey all,
I would like to list all the .avi files in all levels of depth of subdirectories, starting from a parent path. The naming and the level of depth of the directories are arbitrary.
For example, if I give C:\banana\ as a parentpath, with the following structure:
C:\banana\apple.avi
C:\banana\pear\kiwi\banana.avi
C:\banana\orange\kiwi.avi
I would like to get all the paths to the above mentioned avis. From what I understand from the documentation there is no built-in function which gives me this functionality.
genpath seems quite promising though, in that it gives me all the directories in all levels of depth starting from a parent path.
The downside is that it gives me a string, in which all the paths are separated by a semi-colon.
I guess I have to combine the functionality of genpath and ls. I would have to make a list from the string given by genpath, turn it into an array of strings which would in turn be put in ls through the use of a for-loop.
I can than evaluate the resulting ls lists on the presence of avi's.
This solution however doesn't feel as straightforward as it could be. Is there a functionality of MATLAB I have overlooked?
Any suggestions are much appreciated!
0 个评论
采纳的回答
Jan
2011-10-10
Please take the time to look in the FEX. It is very likely that you find solutions for standard problems:
There are further submissions. It seems like recursive directory scans and progressbars are the most famous tasks in the FEX.
更多回答(1 个)
Matt Tearle
2011-10-10
Looks like you're on a Windows system, so try:
[~,flist] = system('dir *.avi /B/S')
You may want to cellstr the result.
ETA: Actually, don't use cellstr. flist is in the form of a single line (with \n characters in it). So use regexp instead:
fileList = regexp(flist,'\n','split');
Note that the last entry will be blank, so
fileList(end) = [];
2 个评论
Matt Tearle
2011-10-10
A couple of things: make sure you're using pathName (with the capital N) to make the command, and get rid of the space between the \ and the *.avi. But also I didn't notice the format that flist has, which means that cellstr won't work. See edit for solution.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Argument Definitions 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!