Index for subfolders without *.pdf files
    4 ビュー (過去 30 日間)
  
       古いコメントを表示
    
Hi guys. I have one folder which contains several 100 subfolders. I need to index for subfolder with does not contain a pdf file, and locate these folders. Hwo can I do this? Thanks a lot
0 件のコメント
採用された回答
  Stephen23
      
      
 2019 年 10 月 11 日
        
      編集済み: Stephen23
      
      
 2019 年 10 月 11 日
  
      Simpler and more robust:
D = 'path to the main folder'; 
S = dir(fullfile(D,'*'));
N = setdiff({S([S.isdir]).name},{'.','..'});
F = @(s)isempty(dir(fullfile(D,s,'*.pdf')));
X = cellfun(F,N)
It returns logical indices, simply use FIND for subscript indices.
The names of the folders without .PDF files:
N(X)
5 件のコメント
  Stephen23
      
      
 2019 年 10 月 12 日
				This should get you started, please adjust it to fit your exact structure and needs:
D = './MainFolder'; % path to the main folder.
out = {};
ds1 = dir(fullfile(D,'*'));
dn1 = setdiff({ds1([ds1.isdir]).name},{'.','..'});
for k1 = 1:numel(dn1) % loop over subfolders.
    ds2 = dir(fullfile(D,dn1{k1},'*'));
    dn2 = setdiff({ds2([ds2.isdir]).name},{'.','..'});
    for k2 = 1:numel(dn2) % loop over subsubfolders.
        ds3 = dir(fullfile(D,dn1{k1},dn2{k2},'*'));
        dn3 = setdiff({ds3([ds3.isdir]).name},{'.','..'});
        for k3 = 1:numel(dn3) % loop over subsubsubfolders.
            tmp = fullfile(D,dn1{k1},dn2{k2},dn3{k3});
            fnm = dir(fullfile(tmp,'Target*.pdf'));
            if isempty(fnm)
                out{end+1} = tmp;
            end
        end
    end
end
その他の回答 (1 件)
  Hemant Verma
      
 2019 年 10 月 11 日
        This should work.
% specify path to the source folder (in your case the one which contains 100 subfolders)
rootFolderPath = './RootFolder';
% get all subfolders and files (if any) inside root folder
allFolders = dir(rootFolderPath);
% initialise an empty variable to store indices of folders without PDF file
foldersWithoutPDF = [];
% for each element of allFolders
for i = 3:length(allFolders)
    % check whether it is a folder and it does not contain any pdf file
    if ( isdir([rootFolderPath filesep allFolders(i).name]) && ...
        isempty(dir([rootFolderPath filesep allFolders(i).name filesep '*.pdf'])) )
        foldersWithoutPDF = [foldersWithoutPDF ; i-2];
    end
end
The variable "foldersWithoutPDF" should contain the indices of all subfolders without PDF file.
1 件のコメント
  Stephen23
      
      
 2019 年 10 月 11 日
				
      編集済み: Stephen23
      
      
 2019 年 10 月 11 日
  
			Note that this line is fragile/buggy:
for i = 3:length(allFolders)
because its author incorrectly assumed that the first two elements of allFolders are always the folder shortcuts '.' and '..'. In fact:
- there is no guarantee that any particular OS will return those shortcuts.
- there is no guarantee that they will be returned as the first two names. In fact it is trivial to create some file/folder names which demonstrate that they are not always the first two returned names:
>> fclose(fopen('+test.txt','wt'));
>> fclose(fopen('-test.txt','wt'));
>> fclose(fopen('@test.txt','wt'));
>> S = dir('*');
>> S.name
ans = +test.txt
ans = .test.txt
ans = .
ans = ..
ans = @test.txt
Also note that fullfile is recommended for creating file paths, rather than string concatenation.
参考
カテゴリ
				Help Center および File Exchange で File Operations についてさらに検索
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



