Matlab:如何根据日期删除文件夹? (例如目录中的 3 个最旧的)
Matlab: How to delete folder based on their date? (e.g. 3 oldest ones in a directory)
我想知道如何在matlab中进行自动删除过程,甚至可以吗!
例如,我想删除 matlab 当前目录中最旧的 3 个文件夹。但问题是 3 个最旧的文件夹可能会根据它们保存的日期或时间出现。比较方式不同,可能是小时比较,也可能是天比较。
下面的函数returns指定给定目录的最旧目录数。它使用 dir 命令列出目录内容,根据 "datenum" 字段对结构进行排序,然后 returns 最旧的目录:
function oldestDirs = getOldestDirectories(directory, count)
oldestDirs = {};
if ~isdir(directory) || count <= 0
return;
end
directories = dir(directory);
fields = fieldnames(directories);
dirCell = struct2cell(directories);
sz = size(dirCell);
% Convert to a matrix
dirCell = reshape(dirCell, sz(1), []);
% Make each field a column
dirCell = dirCell';
% Sort by first field "name"
dirCell = sortrows(dirCell, find(ismember(fields, 'datenum')));
% Put back into original cell array format
dirCell = reshape(dirCell', sz);
% Convert to Struct
sorted = cell2struct(dirCell, fields, 1);
foundElems = 0;
for i = numel(sorted):-1:1
if sorted(i).isdir && ~any(strcmp(sorted(i).name, {'.', '..'}))
foundElems = foundElems + 1;
oldestDirs{foundElems} = fullfile(directory, sorted(i).name);
end
if foundElems == count
return;
end
end
end
您可以像这样使用它:
oldDirs = getOldestDirectories(cd(), 3);
然后您可以简单地循环删除目录:
for i = 1:numel(oldDirs), rmdir(oldDirs{i}, 's'); end
我想知道如何在matlab中进行自动删除过程,甚至可以吗!
例如,我想删除 matlab 当前目录中最旧的 3 个文件夹。但问题是 3 个最旧的文件夹可能会根据它们保存的日期或时间出现。比较方式不同,可能是小时比较,也可能是天比较。
下面的函数returns指定给定目录的最旧目录数。它使用 dir 命令列出目录内容,根据 "datenum" 字段对结构进行排序,然后 returns 最旧的目录:
function oldestDirs = getOldestDirectories(directory, count)
oldestDirs = {};
if ~isdir(directory) || count <= 0
return;
end
directories = dir(directory);
fields = fieldnames(directories);
dirCell = struct2cell(directories);
sz = size(dirCell);
% Convert to a matrix
dirCell = reshape(dirCell, sz(1), []);
% Make each field a column
dirCell = dirCell';
% Sort by first field "name"
dirCell = sortrows(dirCell, find(ismember(fields, 'datenum')));
% Put back into original cell array format
dirCell = reshape(dirCell', sz);
% Convert to Struct
sorted = cell2struct(dirCell, fields, 1);
foundElems = 0;
for i = numel(sorted):-1:1
if sorted(i).isdir && ~any(strcmp(sorted(i).name, {'.', '..'}))
foundElems = foundElems + 1;
oldestDirs{foundElems} = fullfile(directory, sorted(i).name);
end
if foundElems == count
return;
end
end
end
您可以像这样使用它:
oldDirs = getOldestDirectories(cd(), 3);
然后您可以简单地循环删除目录:
for i = 1:numel(oldDirs), rmdir(oldDirs{i}, 's'); end