Как проверить, находится ли папка в пути поиска


У меня есть папка на внешнем диске, в которой есть 50 + папок, и каждая папка имеет 2000+ файлов. Каждая из 50 папок не имеет вложенной папки. Я хочу добавить все файлы на пути поиска MATLAB и, следовательно, Я выполнил addpath(genpath(...)). Это займет около 5 минут. Я не хочу повторять операцию снова, если папки находятся на пути поиска. Как мне это определить?

Я знаю, что могу проверить, находится ли файл в пути поиска с помощью which, но я хочу посмотреть, есть ли основная папка (которая имеет 50 вложенных папок) и подпапки находятся на пути поиска. Как мне это сделать?

Я даже пробовал использовать команду exist, но она дает мне ненулевое значение, даже если папка не находится в пути поиска.

1 2

1 ответ:

Единый случай поиска по каталогу

%%// path_to_be_searched is the folder or directory to be detected 
%%// to be in path or not

%%// colon is the separator used for paths under Linux.
%%// For Windows and others, it needs to be investigated.
path_list_cell = regexp(path,pathsep,'Split')

if any(ismember(path_to_be_searched,path_list_cell))
    disp('Yes, this directory is in MATLAB path');
else
    disp('No, this directory is not in MATLAB path');
end

Основной каталог вместе с подкаталогами поисковый случай с добавлением опции

Для базового пути наряду с поиском по подкаталогу, следующий код будет пытаться найти соответствие для каждого подкаталога, а также базового пути и добавить, который когда-либо отсутствует. Таким образом, даже если вы выборочно удалили любой подкаталог или даже базовый путь из пути, этот код позаботится о добавлении всего, что отсутствует в пути.

%%// basepath1 is the path to the main directory with sub-directories that
%%// are to detected for presence

basepath_to_be_searched = genpath(basepath1)
basepath_list_cell = regexp(basepath_to_be_searched,pathsep,'Split')

%%// Remove empty cells
basepath_list_cell = basepath_list_cell(~cellfun(@isempty,basepath_list_cell))

path_list_cell = regexp(path,pathsep,'Split');

ind1 = ismember(basepath_list_cell,path_list_cell)

%%// Add the missing paths
addpath(strjoin(strcat(basepath_list_cell(~ind1),pathsep),''))

%%// strjoin is a recent MATLAB addition and is also available on file-exchange -
%%// http://www.mathworks.in/matlabcentral/fileexchange/31862-strjoin