How to search and log file locations of specific extension in a folder and its subfolders?

49 views (last 30 days)
I have test results form a model testing that are available as a specific file with .aka extension. But the files are inside a main folder and its sub directories.
Now as the files are inside subdirectories, To import the data into MATLAB, I am using individual file location to import.
datafile(1) = "C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\25 mm orifice\\30mm amp\\30mm04hz.aka";
datafile(2) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\25 mm orifice\\30mm amp\\30mm05hz.aka';
datafile(3) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\25 mm orifice\\30mm amp\\30mm06hz.aka';
datafile(4) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\25 mm orifice\\30mm amp\\30mm07hz.aka';
datafile(5) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\25 mm orifice\\30mm amp\\30mm08hz.aka';
datafile(6) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\25 mm orifice\\30mm amp\\30mm09hz.aka';
datafile(7) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\25 mm orifice\\30mm amp\\30mm10hz.aka';
datafile(8) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\25 mm orifice\\30mm amp\\30mm11hz.aka';
datafile(9) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\25 mm orifice\\30mm amp\\30mm12hz.aka';
datafile(10) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\25 mm orifice\\30mm amp\\30mm13hz.aka';
datafile(11) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\25 mm orifice\\30mm amp\\30mm14hz.aka';
datafile(12) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\25 mm orifice\\20mm amp\\20mm04hz.aka';
datafile(13) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\25 mm orifice\\20mm amp\\20mm06hz.aka';
datafile(14) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\25 mm orifice\\20mm amp\\20mm08hz.aka';
datafile(15) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\damping hunt\\30mm08hz05ori.aka';
datafile(16) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\damping hunt\\30mm08hz10ori.aka';
datafile(17) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\damping hunt\\30mm08hz15ori.aka';
datafile(18) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\damping hunt\\30mm08hz20ori.aka';
datafile(19) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\damping hunt\\30mm08hz25ori.aka';
datafile(20) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\damping hunt\\30mm08hz30ori.aka';
datafile(21) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\damping hunt\\30mm08hz35ori.aka';
datafile(22) = 'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\damping hunt\\30mm08hz40ori.aka';
How can I do this in a way so that I don't have to write these files in this manner?

Accepted Answer

Voss
Voss on 9 Apr 2022
Edited: Voss on 9 Apr 2022
It's a little difficult to know exactly how to do it without knowing if there are any .aka files anywhere in "tank lab results" that should be excluded (e.g., in "\tank lab results\25 mm orifice\others" ?), but here's a couple of bits of code you can refer to and maybe adapt to get exactly the set of file names you need:
If you want to get a list of all .aka files anywhere in "tank lab results" (including all of its descendent directories), you can do this:
main_dir = 'C:\Users\akash\Documents\MATLAB\OceanCA2\tank lab results';
files = dir(fullfile(main_dir,'**','*.aka'));
datafiles = fullfile({files.folder},{files.name});
If instead you want to get a list of all .aka files in specific child directories of "tank lab results" (including all of their descendent directories), you can do this:
main_dir = 'C:\Users\akash\Documents\MATLAB\OceanCA2\tank lab results';
sub_dirs = {'25 mm orifice' 'damping hunt'};
files = [];
for ii = 1:numel(sub_dirs)
files = [files; dir(fullfile(main_dir,sub_dirs{ii},'**','*.aka'))];
end
datafiles = fullfile({files.folder},{files.name});
Also, I should point out that datafiles here is a cell array of full path file names without the double-backslashes (\\) delimiting the directories. If subsequent code using datafiles expects the double-backslashes, it's probably best to modify that code to work with standard full path file names, e.g.:
datafiles = {'C:\\Users\\akash\\Documents\\MATLAB\\OceanCA2\\tank lab results\\25 mm orifice\\30mm amp\\30mm04hz.aka'};
fprintf(datafiles{1})
C:\Users\akash\Documents\MATLAB\OceanCA2\tank lab results\25 mm orifice\30mm amp\30mm04hz.aka
datafiles = {'C:\Users\akash\Documents\MATLAB\OceanCA2\tank lab results\25 mm orifice\30mm amp\30mm04hz.aka'};
fprintf('%s',datafiles{1})
C:\Users\akash\Documents\MATLAB\OceanCA2\tank lab results\25 mm orifice\30mm amp\30mm04hz.aka

More Answers (0)

Categories

Find more on File Operations in Help Center and File Exchange

Products


Release

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!