File: dynareParallelListAllFiles.m

package info (click to toggle)
dynare 4.6.3-4
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 74,896 kB
  • sloc: cpp: 98,057; ansic: 28,929; pascal: 13,844; sh: 5,947; objc: 4,236; yacc: 4,215; makefile: 2,583; lex: 1,534; fortran: 877; python: 647; ruby: 291; lisp: 152; xml: 22
file content (114 lines) | stat: -rw-r--r-- 3,348 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
function fileList = dynareParallelListAllFiles(dirName,PRCDir,Parallel)

% PARALLEL CONTEXT
% In a parallel context, this function searches recursively through all subdirectories
% of the given directory 'dirName' and then return a list of all file
% finds in 'dirName'.
%
%
% INPUTS
%  o dirName           []   ...
%  o PRCDir            []   ...
%  o Parallel          []   ...
%
%  OUTPUTS
%  o fileList          []   ...
%
% Copyright (C) 2009-2017 Dynare Team
%
% This file is part of Dynare.
%
% Dynare is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
%
% Dynare is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with Dynare.  If not, see <http://www.gnu.org/licenses/>.



if (~ispc || strcmpi('unix',Parallel.OperatingSystem))

    fileList={};
    currentPath=[];
    if ~isempty(Parallel.Port)
        ssh_token = ['-p ',Parallel.Port];
    else
        ssh_token = '';
    end

    % Get the data for the current remote directory.
    [Flag, fL]=system(['ssh ',ssh_token,' ',' ',Parallel.UserName,'@',Parallel.ComputerName,' ls ',Parallel.RemoteDirectory,'/',PRCDir, ' -R -p -1']);

    % Format the return value fL.

    nL=regexp(fL,'\n');
    start=1;
    j=1;

    for (i=1:length(nL))

        stringProcessed=fL(start:nL(i)-1);

        if isempty(stringProcessed)
            start=nL(i)+1;
            continue
        end

        if strfind(stringProcessed,'/')
            if strfind(stringProcessed,PRCDir)
                DD=strfind(stringProcessed,':');
                stringProcessed(DD)='/';
                currentPath=stringProcessed;
            end
            start=nL(i)+1;
            continue
        end

        fileList{j,1}=[currentPath stringProcessed];
        start=nL(i)+1;
        j=j+1;
    end


else
    if (strmatch(dirName, 'Root')==1) % First call in Windows enviroment
        dirName=(['\\',Parallel.ComputerName,'\',Parallel.RemoteDrive,'$\',Parallel.RemoteDirectory,'\',PRCDir]);
    end
    % Get the data for the current directory and exstract from it the index
    % for directories:
    dirData = dir(dirName);
    dirIndex = [dirData.isdir];

    % Get a list of the files:
    fileList = {dirData(~dirIndex).name}';

    % Build the path files:
    if ~isempty(fileList)
        fileList = cellfun(@(x) fullfile(dirName,x),...
                           fileList,'UniformOutput',false);
    end

    % Get a list of the subdirectories:
    subDirs = {dirData(dirIndex).name};

    % Find index of subdirectories that are not '.' or '..':
    validIndex = ~ismember(subDirs,{'.','..'});

    % Loop over valid subdirectories (i.e. all subdirectory without '.' and
    % '..':

    for iDir = find(validIndex)
        % Get the subdirectory path:
        nextDir = fullfile(dirName,subDirs{iDir});

        % Recursively call dynareParallelListAllFiles:
        fileList = [fileList; dynareParallelListAllFiles(nextDir,PRCDir,Parallel)];
    end
end