How to delete files ending with odd number?

11 views (last 30 days)
Hi,
I would like to delete each files having its filename ending by an odd number. Example: file0 file1 file2 file3 file4 After: file0 file2 file4
Thank you for your help :)

Accepted Answer

Simon Henin
Simon Henin on 13 Aug 2018
Edited: Simon Henin on 13 Aug 2018
You could looop through all the files and delete ones that have an odd number using regexp, regular expression search
files = dir('*'); % find all files in current directory
for i=1:length(files),
fileno = str2double(cell2mat(regexp(files(i).name, '[0-9]{1,}', 'match')));
if mod(fileno, 2) == 1, % check if fileno modulo 2 == 1
delete(files(i).name);
end
end
  7 Comments
Simon Henin
Simon Henin on 13 Aug 2018
No, it could be done within the same loop (with proper accounting). It is just much easier to use a separate loop to make sure nothing gets overwritten.
Simple example.
Imagine:
files = {'file1', 'file2', 'file22', file24', file3'}; % this will happen because of how the dir command organizes the returned files
counter = 1;
----
Each time you go through the loop:
1) file1 will be deleted
2) file2 -> file1
3) file22 -> file2
4) file24 -> file3 (here's the issue. file3 hasn't gone through the loop yet, and thus, will be overwritten!)
---
Hope this clear it up.
Morgane Flament
Morgane Flament on 13 Aug 2018
Thank you very much for your help Simon. It is all clear.
I was also thinking of sorting the files using the function NATSORTFILES: (https://www.mathworks.com/matlabcentral/fileexchange/47434-natural-order-filename-sort)
pth = '/path/to/folder/containing/files/';
files = dir(fullfile(pth,'file*')); % Get the file in the directory
N = natsortfiles({files.name}); % Sort the filename in natural order
for k = 1:numel(N)
fullfile(D,N{k})
end
And then I add the loops. Do you think it is a good idea?
Again, thank you for your time, it helps me a lot.

Sign in to comment.

More Answers (1)

Morgane Flament
Morgane Flament on 13 Aug 2018
@Simon Henin, do you think I can use your code as well, to delete each file ending with number 2, 3, 4, 5, but not with 0 and 1 let's say? (so no function with odd/even number in this case, I would like to delete the file based on its number at the end of the filename).
  4 Comments
Paolo
Paolo on 13 Aug 2018
@Morgane,
If you wish to delete only files ending with 2,3,4 or 5, change the character set in the regex:
regexp(files(i).name, '[2345]$', 'match')

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!