Ho una struttura a cartelle di migliaia di immagini e video. Sono tutti esportati e quindi hanno la stessa data di creazione, ora. Vorrei impostare la data di creazione per tutti i file in base ai nomi che hanno. Tutti i file seguono la stessa convenzione di denominazione e hanno la data e l'ora nel nome del file.
Esempio:
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
La mia versione attuale del codice include il comando touch e vado ricorsivo attraverso la struttura delle cartelle, ma questo sembra bloccarsi dopo la prima volta che raggiungo il percorso della cartella più basso.
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/(.*)(..)/./')
touch -t $t "$f"
done
cd -
fi
done
cd -
fi
done
Ho anche pensato al comando find, ma non sono sicuro di come estrarre data e ora dal nome del file per il comando touch.