Вы всегда можете искать точки вручную:
[~,filename,~] = fileparts(f);
i = find(filename == '.', 1, 'first');
if ~isempty(i)
filename = filename(1:i - 1);
end
Или вы можете выполнять итерацию fileparts
, пока не прекратится изменение имени:
[~, filename, ~] = fileparts(f);
prev = '';
while ~strcmp(prev, filename)
prev = filename;
[~, filename, ~] = fileparts(prev);
end
Если вы хотите удалить точное расширение, это намного проще. Просто проверьте, заканчивается ли имя этой последовательностью, и удалите столько символов, сколько вам нужно. Для примера .tar.gz
:
ext = '.tar.gz';
n = numel(ext);
if numel(f) >= n && all(f(end - n + 1:end) == ext)
f = f(1:end - n);
end
[~, filename, ext] = fileparts(f);
filename = [filename ext];