First suggestion is, break the problem up into small steps. Also, once you have located the files, then Import does not care that they are spread out over many sub-directores. This is how I would approch the example provided by dr.nb.
I am not a big fan of SetDirectory, but it does simplify the example:
SetDirectory[NotebookDirectory[]]
dirs = Select[FileNames["*"], DirectoryQ]
Restrict the pattern for the files you are looking for with "profile_shapes.*". Store the result that you get from FileNames as rawFileNames.
rawFileNames=FileNames["profile_shapes.*", dirs]
Next, use another even more restricted pattern to select the desired file names off the big list. For this example, I set up three ranges that gets the first four files off each sub directlry - knowing the numerical boundry for each. IntegerString will do the work of dealing with the leading zeros as you switch between one and two digit index numbers. Pasting the individual directory names is not necessary.
targetFileNames = Select[rawFileNames, ! StringFreeQ[#,
Join[
Table[IntegerString[i, 10, 4], {i, 1, 4}],
Table[IntegerString[i, 10, 4], {i, 26, 29}],
Table[IntegerString[i, 10, 4], {i, 51, 54}]
]] &]
In case you want to use the header rows later, don't throw it away, get the full table of data first and then separate the data rows of interest in a seperate step.
rawData=Import[#,"Table"]&/@targetFileNames;
headerData=Take[#,2]&/@rawData;
tableData=Drop[#,2]&/@rawData;
Now the selected table data is ready to be shown:
ListLinePlot[tableData, PlotRange->All]