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 --help
l'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}'
date
approccio 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 date
nome file modificato come secondo argomento a mv
cui esegue la ridenominazione.
L'utilizzo aggiuntivo e leggermente tortuoso della bash
sostituzione variabile è necessario per bash
valutare il date
comando.
find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1 $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;