Make the subfolders name in output folder the same input folder

1 view (last 30 days)
I have a data process folder like this: with directory ~/Matlab/homework_4/input
I already access into the folder to sub-folder to do my job by the code:
d = dir(pwd);%d(1:2) = [];
isub = [d(:).isdir]; %# returns logical vector
fname = {d(isub).name}';
fname(ismember({d.name}, {'.', '..'})) = []; %remove . and .. of folder name.
% ------------------------------------------------------------
for i = 1:length(fname)
cd(char(fname{i})
<[........ Do the job .......]
output_data.dat>
end
and wanna create the same-name of sub-folder on the directories: "~/Matlab/homework_4/output" using "fname{i}" on the code. And move the output_data.dat to that folder. Any way to do this? Many thanks :(
  2 Comments
awezmm
awezmm on 3 Nov 2018
So basically, you want to have a copy of ~/Matlab/homework_4/input but instead, name it ~/Matlab/homework_4/output with all the same subfolders inside?
Long Hà Vinh
Long Hà Vinh on 3 Nov 2018
Yes. after the process, input has "output_data_*.dat" file and other files in any subfolder, but on "output" folder is clear. I want have the same subfolder on "output" folder and have only "output_data_*.dat"

Sign in to comment.

Accepted Answer

Stephen23
Stephen23 on 3 Nov 2018
Edited: Stephen23 on 3 Nov 2018
Do NOT use cd: this is a slow and inappropriate for reading/writing data. You should just use absolute/relative filenames generated with fullfile, e.g.:
D = '~/Matlab/homework_4';
S = dir(fullfile(D,'input','*'));
N = setdiff({S([S.isdir]).name},{'.','..'});
for k = 1:numel(N)
src = fullfile(D,'input',N{k}) % input subfolder path
I = imread(fullfile(src,'hello.jpg')); % example file import
... process the image.
dst = fullfile(D,'output',N{k}) % output subfolder path
imwrite(I,fullfile(dst,'world.jpg')) % example file export
end
All MATLAB functions that import/export files work with relative/absolute filenames, and this is faster, more efficient, and easier to debug than mucking about with changing directories.
  8 Comments
Long Hà Vinh
Long Hà Vinh on 3 Nov 2018
@Stephen: It said:
'~/Matlab/homework_4/input'
when I run in command. But when I run
E = fullfile(D,'input')
S = dir(E)
It break and when I call
E=
'~/Matlab/homework_4/input'
S =
0×1 empty struct array with fields:
name
folder
date
bytes
isdir
datenum
Sound crazy!
Long Hà Vinh
Long Hà Vinh on 3 Nov 2018
@Stephen Cobeldick: This completely work on windows version. So I need to fix my Matlab on Linux. Thanks for your support!

Sign in to comment.

More Answers (1)

madhan ravi
madhan ravi on 3 Nov 2018

Categories

Find more on Startup and Shutdown in Help Center and File Exchange

Products


Release

R2017b

Community Treasure Hunt

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

Start Hunting!