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 --helpla 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}'
dateenfoque 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 datenombre de archivo modificado como el segundo argumento al mvque realiza el cambio de nombre.
El uso adicional y ligeramente tortuoso de la bashsustitución de variables es necesario al bashevaluar el datecomando.
find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1 $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;