2016-07-14 1 views
1

Мне интересно, как я могу сделать процесс автоматического удаления в Matlab, и даже это возможно или нет!Matlab: Как удалить папку на основе их даты? (например, 3 самых старых в каталоге)

Например, я хочу удалить, скажем, 3 самых старых папки в текущем каталоге Matlab. Но проблема в том, что 3 старшие папки могут появиться в зависимости от даты их сохранения или часа. Сравнение варьируется, оно может прийти в сравнение часов или сравнение дней.

+0

Что вы попробовали? Почему это не сработало? – mhopeng

ответ

2

Следующая функция возвращает указанное число самых старых каталогов данного каталога. Он использует команду dir список содержимого каталога, сортирует структуру, основанную на поле «datenum», а затем возвращает старые каталоги:

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 
Смежные вопросы