leggi la data di creazione dal nome del file e cambia - batch

1

Ho dei file che hanno nomi come "clip-2014-01-31 18; 50; 15.mp4", cioè "clip-YYYY-MM-DD hh; mm; ss.mp4".

Come posso impostare la data e l'ora di creazione in base a come è specificato nel nome del file per tutti i 2000 file che ho in una cartella. So che il comando touch -t modifica la data di creazione, ma non so come estrarre le informazioni di data / ora dal nome del file e inserirle in un comando, quindi questo viene fatto automaticamente per tutti i file.

    
posta mcanwo 19.08.2014 - 22:49
fonte

1 risposta

3

Sei fortunato perché i numeri nei nomi dei tuoi file sono solo nell'ordine di cui touch -t ha bisogno.

Questo comando nel terminale funzionerà. Devi solo assicurarti che la tua directory di lavoro sia impostata sulla cartella che vuoi fare:

for f in *; do
    t=$(echo $f | sed -E 's/([A-z]*-)|([ ,;])|(\..*)//g' | sed -E 's/(.*)(..)/./')
    touch -t $t "$f"
done

Per scomporlo:

for f in * imposta la variabile f sul nome di ciascun file nella directory, a sua volta.

do mette tutto fino a done nel ciclo for .

t=$(…) imposta la variabile t sull'output dei comandi tra parentesi.

Il primo comando sed corrisponde a qualsiasi lettera prima di un simbolo - , il - ; e i simboli space e l'estensione del file e li elimina.

Il secondo comando sed inserisce un intervallo tra i valori mm e ss, come richiesto dal tocco.

touch -t $t $f modifica la modifica del file e i tempi di creazione sul valore di t sul file f .

Testato su alcuni file fittizi con qualsiasi versione di sed fornita con Mavericks.

    
risposta data 20.08.2014 - 01:41
fonte

Leggi altre domande sui tag