Eu tenho um problema com meu formato de data. Quero mudar de um formato para outro e vice-versa. Meus formatos de data são
Formato 1
YYYY-MM-DD
Formato 2
MM/DD/YYYY
Quero alterar o formato 1 para o formato 2 e o formato 2 para o formato 1.
Eu tenho um problema com meu formato de data. Quero mudar de um formato para outro e vice-versa. Meus formatos de data são
Formato 1
YYYY-MM-DD
Formato 2
MM/DD/YYYY
Quero alterar o formato 1 para o formato 2 e o formato 2 para o formato 1.
Respostas:
Use a 'data' do GNU para isso. Também converterá entre outros formatos para você (veja date --help
a lista de formatos).
$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05
Supondo que você tenha datas em formato de texto que precisam ser convertidas
echo '2013-12-13' | awk -v FS=- -v OFS=/ '{print $2,$3,$1}'
E vice versa
echo '12/13/2013' | awk -v FS=/ -v OFS=- '{print $3,$1,$2}'
date
abordagem, que é certamente mais elegante
$ echo YYYY-MM-DD | { IFS=- read y m d && echo "$m/$d/$y"; }
MM/DD/YYYY
Se você tiver um arquivo com muitas dessas datas, uma por linha:
awk -F- -vOFS=/ '{print $2,$3,$1}' < that-file
Usando sed da seguinte maneira:
$ 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
Respondendo à pergunta esclarecida nos comentários sobre como alterar o formato da data em um nome de arquivo, use uma variante da gnu date
abordagem de drewbenn . Este comando localiza todos os arquivos na pasta local e canaliza apenas o nome do arquivo xargs
, substituindo o date
nome do arquivo modificado como o segundo argumento ao mv
qual a renomeação é executada.
O uso adicional e ligeiramente tortuoso da bash
substituição de variáveis é necessário ao bash
avaliar o date
comando.
find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1 $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;