Como você coloca data e hora em um nome de arquivo?

15

Estou tentando executar um comando e gostaria de colocar a data e a hora no nome do arquivo de saída.

Aqui está um exemplo de comando que gostaria de executar.

md5sum /etc/mtab > 2016_4_25_10_30_AM.log

O formato de data e hora pode ser algo sensato com sublinhados. Mesmo UTC se o AM e o PM não puderem ser usados.

    
por visc 25.04.2016 / 16:24

1 resposta

31

Se você quiser usar o datetime atual como um nome de arquivo, poderá usar date e .

 $ md5sum /etc/mtab > "$(date +"%Y_%m_%d_%I_%M_%p").log"

Isso resulta no arquivo 2016_04_25_10_30_AM.log (embora, com o datetime atual) sendo criado com o hash md5 de /etc/mtab como seu conteúdo.

Por favor, note que nomes de arquivos contendo timestamps de formato de 12 horas provavelmente não irão classificar por nome da maneira que você quer que eles sejam ordenados. Você pode evitar esse problema usando timestamps de formato de 24 horas.

Se você não tiver um requisito para usar esse formato de data específico, poderá considerar o uso de um formato de data e hora compatível com ISO 8601. Alguns exemplos de como gerar representações de data / hora ISO 8601 válidas incluem:

 $ date +"%FT%T"
 2016-04-25T10:30:00

 $ date +"%FT%H%M%S"
 2016-04-25T103000

 $ date +"%FT%H%M"
 2016-04-25T1030

 $ date +"%Y%m%dT%H%M"
 20160425T1030

Se você quiser nomes de arquivos "mais seguros" (por exemplo, para compatibilidade com o Windows), você pode omitir os dois-pontos da parte do tempo.

Por favor, tenha em mente que todos os exemplos acima assumem a hora local do sistema. Se você precisar de uma representação de tempo consistente em todos os fusos horários, especifique um deslocamento de fuso horário ou UTC. Você pode obter um deslocamento de fuso horário compatível com ISO 8601 usando "% z" na parte de formato da sua chamada date desta forma:

 $ date +"%FT%H%M%z"
 2016-04-25T1030-0400

Você pode obter o horário UTC na sua chamada date , especificando o sinal -u e adicionando "Z" ao final da string de data e hora para indicar que o horário é UTC:

 $ date -u +"%FT%H%MZ"
 2016-04-25T1430Z
    
por 25.04.2016 / 16:28