Tentei usar $(date)
no meu script shell bash, no entanto, quero a data em YYYY-MM-DD
formato.
Como faço para conseguir isso?
1112
No bash (> = 4.2), é preferível usar o formatador de datas incorporado do printf (parte do bash) em vez do externo date
(geralmente a data GNU).
Assim sendo:
# put current date as yyyy-mm-dd in $date
# -1 -> explicit current date, bash >=4.3 defaults to current time if not provided
# -2 -> start time for shell
printf -v date '%(%Y-%m-%d)T\n' -1
# put current date as yyyy-mm-dd HH:MM:SS in $date
printf -v date '%(%Y-%m-%d %H:%M:%S)T\n' -1
# to print directly remove -v flag, as such:
printf '%(%Y-%m-%d)T\n' -1
# -> current date printed to terminal
No bash (<4.2):
# put current date as yyyy-mm-dd in $date
date=$(date '+%Y-%m-%d')
# put current date as yyyy-mm-dd HH:MM:SS in $date
date=$(date '+%Y-%m-%d %H:%M:%S')
# print current date directly
echo $(date '+%Y-%m-%d')
Outros formatos de data disponíveis podem ser visualizados nas páginas de manual da data (para comando externo não específico do bash):
man date
+%F %T
como atalho para+%Y-%m-%d %H:%M:%S
. Observe que alguns sistemas de arquivos (tosse ** HFS) convertem o arquivo:
para a/
, fornecendo uma string como a2016-09-15 11/05/00
que é extremamente confusa.date=$(date)
vez dedate=`date`
. Além disso, não use maiúsculas para suas variáveis privadas; nomes de variáveis em maiúsculas são reservados para o sistema.Tentar:
$(date +%F)
fonte
Você pode fazer algo assim:
fonte
Você está procurando o formato de data padrão ISO 8601 ; portanto, se você tiver a data GNU (ou qualquer comando de data mais moderno que 1988), basta:
$(date -I)
fonte
date -I
não funcionou. A instalação do coreutils GNU usando o brew (que usa o prefixo 'g')gdate -I
funcionou.-I
opção documentada para o GNUdate
, embora com certeza pareça equivalentedate +%F
.A saída seria
2015-06-14
.fonte
%
.pode ser usado para remover dois pontos (:) entre
resultado
fonte
Com o Bash recente (versão ≥ 4.2), você pode usar o built-in
printf
com o modificador de formato%(strftime_format)T
:printf
é muito mais rápido do quedate
desde que é um Bash, enquantodate
é um comando externo.Além disso,
printf -v date ...
é mais rápido do quedate=$(printf ...)
já que não requer bifurcação.fonte
date
se você já estiver usando isso em um script bash, pois não precisa carregar nenhuma biblioteca extra. (* I medido no meu servidor linux diferença a ~ 160x velocidade de mais de 1000 iterações)printf -v date
não bifurcar um subshell. Muito boa informação !!Sempre que tenho uma tarefa como essa, acabo voltando a
para me lembrar de todas as possibilidades.
fonte
se você deseja o ano em um formato de dois números, como 17, em vez de 2017, faça o seguinte:
fonte
Aqui x é a data da amostra usada e, em seguida, o exemplo exibe a formatação dos dados e a obtenção de datas 10 minutos a mais que a data atual.
fonte
Eu uso a seguinte formulação:
Confira a página de manual
date
, há várias outras opções úteis:fonte
Eu uso
$(date +"%Y-%m-%d")
ou$(date +"%Y-%m-%d %T")
com hora e horas.fonte
Você pode definir a data como variável de ambiente e depois você pode usá-la
ou
fonte