我有这个文件夹组织
root/folder_1/file1_1 --up to-- file_5693
root/folder_2/file2_1 --up to-- file_100
root/folder_3/file3_1 --up to-- file_600
root/folder_4/file4_1 --up to-- file_689
我想在每个文件夹中选择一个(1000个示例)随机文件,并将它们放在一个输出文件夹中,但对于文件少于200个的文件夹,我想复制所有文件。
root_2/output:
file1_350
.
.
.
file2_1 --> file2_100
.
.
.
etc
我该怎么做?
我尝试使用dir
命令列出目录中的所有文件夹名称,但文件夹编号不是连续的。有什么帮助吗?
答案 0 :(得分:0)
我可能会误解,但我没有看到订购文件夹名称的原因,因为无论如何你都要复制它们。 以下是用于复制文件夹内文件的脚本,该文件位于根目录中。
您只需更改以下四个变量ROOT_DIR
,OUT_DIR
,THRESHOLD_COPY
和N_RANDOM_COPY
。
% Define
ROOT_DIR = './'; % where the subdirectories are located
OUT_DIR = './root2'; % copy destination
THRESHOLD_COPY = 200; % threshold for copying all files
N_RANDOM_COPY = 100; % number of files that you want to copy
dirList = dir(ROOT_DIR);
dirList = dirList(3:end); % first two are ./ and ../
dirOnlyIndicators = cell2mat({dirList.isdir});
dirs = dirList(dirOnlyIndicators);
for dirIterator = transpose(dirs)
subdirList = dir([ ROOT_DIR dirIterator.name]);
fileIndicators = ~cell2mat({subdirList.isdir});
subfileList = {subdirList(fileIndicators)};
nFiles = sum(fileIndicators);
copyIndices = [];
if nFiles > THRESHOLD_COPY
copyIndices = randperm(nFiles);
copyIndices = copyIndices(1:N_RANDOM_COPY);
else
copyIndices = 1:nFiles;
end
for copyIndex = copyIndices
copyfile([ ROOT_DIR dirIterator.name '/' subfileList{copyIndex}.name],...
[OUT_DIR '/' subfileList{copyIndex}.name],...
'f');
end
end