- 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
10 views (last 30 days)
Show older comments
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 Comments
Accepted Answer
Jan
on 10 Oct 2011
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.
More Answers (1)
Matt Tearle
on 10 Oct 2011
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 Comments
Matt Tearle
on 10 Oct 2011
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.
See Also
Categories
Find more on Argument Definitions in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!