Tengo un problema con mi formato de fecha. Quiero cambiar de un formato a otro y viceversa. Mis formatos de fecha son
Formato 1
YYYY-MM-DD
Formato 2
MM/DD/YYYY
Quiero cambiar el formato 1 al formato 2 y el formato 2 al formato 1.
Tengo un problema con mi formato de fecha. Quiero cambiar de un formato a otro y viceversa. Mis formatos de fecha son
Formato 1
YYYY-MM-DD
Formato 2
MM/DD/YYYY
Quiero cambiar el formato 1 al formato 2 y el formato 2 al formato 1.
Respuestas:
Use GNU 'date' para esto. También se convertirá entre otros formatos para usted (consulte date --help
la lista de formatos).
$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05
Suponiendo que tiene fechas en forma de texto que deben convertirse
echo '2013-12-13' | awk -v FS=- -v OFS=/ '{print $2,$3,$1}'
Y viceversa
echo '12/13/2013' | awk -v FS=/ -v OFS=- '{print $3,$1,$2}'
date
enfoque de drewbenn , que sin duda es más elegante
$ echo YYYY-MM-DD | { IFS=- read y m d && echo "$m/$d/$y"; }
MM/DD/YYYY
Si tiene un archivo con muchas de esas fechas, una por línea:
awk -F- -vOFS=/ '{print $2,$3,$1}' < that-file
Usando sed de la siguiente manera:
$ 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
Respondiendo la pregunta aclarada en los comentarios sobre cómo cambiar el formato de fecha en un nombre de archivo, use una variante del enfoque de drewbenn gnu date
. Este comando encuentra todos los archivos en la carpeta local y canaliza solo el nombre del archivo xargs
, sustituyendo el date
nombre de archivo modificado como el segundo argumento al mv
que realiza el cambio de nombre.
El uso adicional y ligeramente tortuoso de la bash
sustitución de variables es necesario al bash
evaluar el date
comando.
find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1 $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;