/ / Rekursywna lista katalogów w Matlab [duplicate] - matlab

Rekursywna lista katalogów w Matlab [duplicate] - matlab

Mam katalog, który ma 3 foldery. Każdy folder z tych 3 folderów ma inną liczbę folderów. I w każdym folderze tych folderów znajduje się lista plików, które chcę uruchomić kod na każdym z tych plików. Na przykład: to jest tak: MainFolder ma SubFolder1, SubFolder2. SubFolder1 ma SubSubFolder1, SubSubFolder2, SubSubFolder3. SubFolder2 ma SubSubFolder1, SubSubFolder2. Każdy z SunSubFolders ma wiele plików. Chcę skryptu, który daję ścieżce MainFolder i przechodzi przez każdy podfolder i podukład katalogów i wykonuje operacje na plikach w tym podukładu i zapisuje obszar roboczy pod nazwą tego podukładnika. Tak więc w powyższym przykładzie, po wykonaniu pracy nad plikami w SubSubFolder1 wynikowy obszar roboczy zostanie zapisany w lokalizacji o nazwie SubSubFolder1.mat.

Proszę pytam, czy ktoś może mi pomóc, ponieważ jest to dla mnie dość pilne. Wielkie dzięki za życzliwą pomoc i uwagę.

Aktualizacja:

Zrobiłem to, ale pojawił się inny problemkiedy uzyskuję dostęp do plików w SubSubFolders i próbuję wykonać operację, mówi "Plik" [00000000] .pgm "nie można otworzyć, ponieważ: Brak takiego pliku lub katalogu". Jak rozwiązać ten problem?

to jest mój kod:

D = rdir("Hussein/*/*");           %// List of all sub-directories
for k = 1:length(D)
currpath = D(k).name;                 %// Name of current directory
[pathstr, name, ext] = fileparts(currpath);
%// Operate on all .txt files in currpath
l = dir(fullfile(currpath, "*.pgm")); %// Listing of all relevant files
filenames={l.name}";

nfiles=length(filenames)
%images=zeros(240, 320, 1000);
idx=1;

strtidx=1;
endidx=nfiles;
step=1;

waitbar(0);
for i=strtidx:step:endidx
fn=fullfile("", filenames{i});
tmp=padarray(ut_pgmread(fn), 1, "post");
%figure(1); imagesc(tmp); colormap(jet(4096)); colorbar;

images(:, :, idx)=tmp; idx=idx+1;

waitbar(i/nfiles);
end

close(findall(0,"Tag","TMWWaitbar"));
name="/Volumes/Untitled/work/"+name;
save (name, "-v7.3");

%for m = 1:length(F)
%   currfile = F(m).name;             %// Name of current file

%// Do something with currfile...
%end

%// Write output (if any) in currpath...
end;

Odpowiedzi:

3 dla odpowiedzi № 1

Wygląda na to, że szukasz rekurencyjnej wersji dir, więc możesz znaleźć ulepszony rdir narzędzie z MATLAB File Exchange przydatnej do twoich celów. Korzystanie z ulepszonej rdirTwój kod będzie wyglądał następująco:

%// List all sub-directories under MainFolder recursively
D = rdir("MainFolder***.");             %// List of all sub-directories
for k = 1:length(D)
currpath = D(k).name;                 %// Name of current directory

%// Operate on all .txt files in currpath
F = dir(fullfile(currpath, "*.txt")); %// Listing of all relevant files
for m = 1:length(F)
currfile = F(m).name;             %// Name of current file

%// Do something with currfile...
end

%// Write output (if any) in currpath...
end;