2016-07-14 6 views
1

matlabで自動削除プロセスをどのように行うことができますか?Matlab:日付に基づいてフォルダを削除するには? (たとえば、ディレクトリ内で最も古く3つのもの)

たとえば、私はmatlabの現在のディレクトリにある最も古い3つのフォルダを削除するとします。しかし、問題は、保存された日付または時間に基づいて3つの最も古いフォルダが出現する可能性があることです。比較は異なりますが、時間の比較や日の比較になる可能性があります。

+0

何を試しましたか?なぜそれは動作しませんでしたか? – mhopeng

答えて

2

次の関数は、指定されたディレクトリの最も古いディレクトリの指定された数を返します。あなたはそれが好きで使用することができます

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); 

次にあなたにそれは最も古いディレクトリを返し、「関数datenum」フィールドに基づいて構造をソートし、ディレクトリの内容を一覧表示するdirコマンドを使用していますループ内のディレクトリを単に削除することができます:

for i = 1:numel(oldDirs), rmdir(oldDirs{i}, 's'); end 
関連する問題