Delete files with specific names

Hello
I have a directory with files from the same type with names like:
2016_03_24_09 -0002-0001-00058.dcm
2016_03_24_09 -0002-0001-00059.dcm
2016_03_24_09 -0002-0001-00060.dcm
etc.
Based on the last 5 figures (e.g.,*00060.dcm),
I need to delete every file that ends with a number greater than 276.
Is there a way to do it in a loop?
Thanks,
Tali

4 comentarios

John
John el 31 de Mayo de 2016
files = ls('*.dcm'); % list of files with .dcm extension
for n = 1:N
ind1 = strfind(files(n,:), '-'); % indicies of the '-' char
ind2 = strfind(files(n,:), '.'); % index of '.'
str = files(n,ind1(end)+1:ind2-1);% extract the numeric string
if str2num(str) > 276
delete(files(n,:)); % delete if greater than 276
end
end
Tali Leibovich
Tali Leibovich el 31 de Mayo de 2016
Hi John
Thank you so much for your quick response!
I'm trying it now and get this error for the first line (for n=1:N):
Error using :
For colon operator with char operands, first and last operands must be char.
Have I done something wrong?
Thanks again so much!
Tali
You need
for n = 1: size(files, 1)
and, since using ls gives you a character array instead of a cell array, you'll need
delete(strtrim(files(n,:)));
to trim off the extra whitespace. If you use dir() instead of ls(), you don't need to use strtrim().
Tali Leibovich
Tali Leibovich el 31 de Mayo de 2016
it's working!! Thank you so much!!!!

Iniciar sesión para comentar.

 Respuesta aceptada

Thorsten
Thorsten el 31 de Mayo de 2016
Editada: Thorsten el 31 de Mayo de 2016
You can get the filenames using
d = dir;
filenames = {d.name};
Loop through the filenames
for i = 1:numel(filenames)
fn = filenames{i};
[num, cnt] = sscanf(fn(find(fn == '-', 1, 'last')+1:end-4), '%d');
if cnt == 1 && num > 276
disp(fn)
end
end
This just displays the files to be deleted. If everything is alright, replace
disp(fn)
with
delete fn

4 comentarios

Tali Leibovich
Tali Leibovich el 31 de Mayo de 2016
Hi Thorsten
Thank you so much for your response!
I tried to use it, and changed the function from disp to delete
But for some reason I can still see the files in the folder.
Is there anything that I'm missing?
Thank you so much again!
Tali
The files have to be in the same folder. Otherwise you'll have to prepend the folder with the fullfile() function.
Also, you might want to put
recycle on;
before the code to send it to the recycle bin instead of losing it forever.
And if you have the file manager open, you might need to refresh the view to see the changes.
Tali Leibovich
Tali Leibovich el 31 de Mayo de 2016
Thanks!
William R
William R el 27 de Oct. de 2021
Editada: William R el 27 de Oct. de 2021
This code will not work since
delete fn
will try to delete a file with the name "fn". So the result will be:
Warning: File 'fn' not found.
The right way to do it can be found here.
Or in this example:
delete(fn);

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre File Operations en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 31 de Mayo de 2016

Editada:

el 27 de Oct. de 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by