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

23

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 eu gostaria de executar.

md5sum /etc/mtab > 2016_4_25_10_30_AM.log

O formato da data e hora pode ser sensato com sublinhados. Até o UTC, se o AM e o PM não puderem ser usados.

visc
fonte
Se não o Bash, qual shell você está usando?
25916 Ryan
Oh, é festa ... Eu quis dizer script bash *
Visc
Você não está canalizando, está redirecionando. E a pergunta seria a mesma se você não estivesse redirecionando. Atualizando título.
Mikel

Respostas:

46

Se você quiser usar a data e hora atuais como um nome de arquivo, poderá usar datee comandar a substituição .

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

Isso resulta no arquivo 2016_04_25_10_30_AM.log(embora com a data e hora atual) sendo criado com o hash md5 /etc/mtabcomo seu conteúdo.

Observe que os nomes de arquivos que contêm carimbos de data e hora no formato de 12 horas provavelmente não serão classificados por nome da maneira que você deseja que eles sejam classificados. Você pode evitar esse problema usando carimbos de data / hora no formato de 24 horas.

Se você não precisa usar esse formato de data específico, considere usar um formato de data e hora compatível com ISO 8601. Alguns exemplos de como gerar representações válidas de data e hora ISO 8601 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), poderá omitir os dois pontos da parte da hora.

Lembre-se de que os exemplos acima assumem a hora local do sistema. Se você precisar de uma representação de horário consistente entre 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 datechamada, como segue:

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

Você pode obter a hora UTC em sua datechamada especificando o -usinalizador e adicionando "Z" ao final da cadeia de data e hora para indicar que a hora é UTC assim:

 $ date -u +"%FT%H%MZ"
 2016-04-25T1430Z
Ryan
fonte
@ Mikel Você e eu fazemos uma edição cruzada?
22416 Ryan
Possivelmente. Acabei de alterar "subshell" para "substituição de comando". Estou pronto agora, então edite como quiser.
Mikel
@ Mikel Sem problemas. Reenviei minha edição agora.
22416 Ryan
@ Mikel Não se preocupe! Eu deveria ter me lembrado de chamá-lo de "substituição de comando" de qualquer maneira. Obrigado por melhorar a resposta!
22416 Ryan
3
Sublinhado é um personagem estranho. É preferível usar o ISO-8601 como o $(date +%FT%T)que dará 2016-04-25T10:30:00.
Hschou # 03