Tengo una estructura de carpetas con miles de fotos y vídeos. Todos ellos están exportados y por lo tanto tienen la misma fecha de creación, la hora. Me gustaría establecer la fecha de creación de todos los archivos de acuerdo con los nombres que tienen. Todos los archivos siguen la misma convención de nomenclatura y tienen la fecha y la hora en el nombre del archivo.
Ejemplo:
Pictures (top folder)
-- Folder 1
---- 2010-05-03
------ 2010-05-03 at 11-58-32.jpg
------ 2010-05-03 at 11-59-32.jpg
------ 2010-05-03 at 12-58-32.jpg
---- 2010-07-04
------ 2010-07-04 at 11-58-32.jpg
------ 2010-07-04 at 12-01-32.mov
-- Folder 2
---- 2090-03-03
------ 2010-03-03 at 10-01-32.jpg
------ 2010-03-03 at 11-01-32.jpg
Mi versión actual del código incluye el comando touch y voy recursivamente a través de la estructura de carpetas, pero esto parece atascarse después de la primera vez que llego a la ruta de la carpeta más baja.
for dir in Pictures/*; do
if [[ -d "$dir" ]]; then
cd "$dir"
for dir2 in *; do
if [[ -d "$dir2" ]]; then
cd "$dir2"
for f in *; do
t=$(echo $f | sed -E 's/([A-z]*-)|([A-z ,;])|(\..*)//g' | sed -E 's/(.*)(..)/\1.\2/')
touch -t $t "$f"
done
cd -
fi
done
cd -
fi
done
También he pensado en el comando find, pero no estoy seguro de cómo extraer entonces la fecha y la hora del nombre del archivo para el comando touch.