Ho un problema con il mio formato data. Voglio passare da un formato all'altro e viceversa. I miei formati di data sono
Formato 1
YYYY-MM-DD
Formato 2
MM/DD/YYYY
Voglio cambiare il formato 1 nel formato 2 e il formato 2 nel formato 1.
Ho un problema con il mio formato data. Voglio passare da un formato all'altro e viceversa. I miei formati di data sono
Formato 1
YYYY-MM-DD
Formato 2
MM/DD/YYYY
Voglio cambiare il formato 1 nel formato 2 e il formato 2 nel formato 1.
Risposte:
Usa GNU 'date' per questo. Convertirà anche tra altri formati per te (vedi date --helpl'elenco dei formati).
$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05
Supponendo che ci siano date in forma di testo che devono essere convertite
echo '2013-12-13' | awk -v FS=- -v OFS=/ '{print $2,$3,$1}'
E viceversa
echo '12/13/2013' | awk -v FS=/ -v OFS=- '{print $3,$1,$2}'
dateapproccio di drewbenn , che è sicuramente più elegante
$ echo YYYY-MM-DD | { IFS=- read y m d && echo "$m/$d/$y"; }
MM/DD/YYYY
Se hai un file con molte di queste date, uno per riga:
awk -F- -vOFS=/ '{print $2,$3,$1}' < that-file
Usando sed come segue:
$ echo '2013-12-13' | sed -r 's/([[:digit:]]{2,4})-([[:digit:]]{1,2})-([[:digit:]]{1,2})/\2\/\3\/\1/g'
12/13/2013
$ echo '12/13/2013' | sed -r 's/([[:digit:]]{1,2})\/([[:digit:]]{1,2})\/([[:digit:]]{2,4})/\3-\1-\2/g'
2013-12-13
Rispondendo alla domanda chiarita nei commenti su come modificare il formato della data in un nome file, utilizzare una variante dell'approccio di drewbenn gnu date. Questo comando trova tutti i file nella cartella locale e reindirizza solo il nome del file xargs, sostituendo il datenome file modificato come secondo argomento a mvcui esegue la ridenominazione.
L'utilizzo aggiuntivo e leggermente tortuoso della bashsostituzione variabile è necessario per bashvalutare il datecomando.
find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1 $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;