Need an Elegant Sorting Solution for Directory File Names

I have a directory of filenames, (within a files structure array) structured like this:
cdef2.20140101.pdef.txt
cdef2.20140102.pdef.txt
....
pdef.gdef.201300101-20130105.txt
pdef.gdef.201300106-20130110.txt
....
I need to reorder these (ascending order from oldest to newest) according to the dates embedded within these file names which are formatted like YYYYMMDD. I've explored several options, but I'm seeking an elegant solution without do loops. Any tips or suggestions would be appreciated.

3 comentarios

Which date to consider in file names like pdef.gdef.201300101-20130105.txt ?
The file naming also doesn't contain any special pattern to avoid loop,
If you can change cdef2.20140101.pdef.txt to cdef2.pdef.20140101.txt, then it will be easier to split all files names using delimiter ('.')
Needing to sort by the first date in pdef.gdef.201300101-20130105.txt (i.e., 20130101). I considered running a shell script to rename the files but trying not to add another step.
Can we assume that there exist only two type of files?
One which starts with cdef2 and one which starts with pdef?

Iniciar sesión para comentar.

 Respuesta aceptada

Voss
Voss el 9 de Jul. de 2023
Editada: Voss el 9 de Jul. de 2023
filenames = { ...
'cdef2.20140101.pdef.txt'; ...
'cdef2.20140102.pdef.txt'; ...
'pdef.gdef.20130101-20130105.txt'; ...
'pdef.gdef.20130106-20130110.txt'}
filenames = 4×1 cell array
{'cdef2.20140101.pdef.txt' } {'cdef2.20140102.pdef.txt' } {'pdef.gdef.20130101-20130105.txt'} {'pdef.gdef.20130106-20130110.txt'}
dates = regexp(filenames,'\d{8}','match','once');
[~,idx] = sort(dates);
sorted_filenames = filenames(idx)
sorted_filenames = 4×1 cell array
{'pdef.gdef.20130101-20130105.txt'} {'pdef.gdef.20130106-20130110.txt'} {'cdef2.20140101.pdef.txt' } {'cdef2.20140102.pdef.txt' }

Más respuestas (0)

Categorías

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

Productos

Versión

R2023a

Preguntada:

el 9 de Jul. de 2023

Editada:

el 9 de Jul. de 2023

Community Treasure Hunt

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

Start Hunting!

Translated by