No Linux, como criar um arquivo com um nome com data e hora atuais

12

Quero criar um arquivo cujo nome seja uma data e hora atuais. Eu posso criar um arquivo com o touchcomando Também posso obter hora atual com o datecomando Então, eu acho que preciso canalizar o segundo comando para o primeiro. Como eu posso fazer isso?

Der Hochstapler
fonte

Respostas:

19

Use o valor de retorno de uma expressão de shell como o argumento para touch:

touch $( date '+%Y-%m-%d_%H-%M-%S' )

Resultado: um arquivo chamado por exemplo 2012-03-11_14-33-53.

Esta resposta pressupõe que você esteja usando bash(está descrito na manseção da página Substituição de Comando ), mas outros shells funcionarão da mesma forma ou apenas um pouco diferentes.

Daniel Beck
fonte
@MdGao E descrito na mesma seção da página de manual. Eu prefiro a resposta que dei, mas aqui estão algumas razões
Daniel Beck
Eu removi meu comentário porque Markdown quebrou as costas. Obrigado pelo link @DanielBeck
Mengdi Gao
2
@gasan Apenas coloque-o entre "aspas. Você pode imaginar a saída de datesubstituir essa parte da linha de comando, e touch Sun Mar 11 14:48:31 CET 2012criaria nome de arquivos Sun, Maretc. touch "Sun Mar 11 14:48:31 CET 2012", por outro lado fina funciona (exceto eu não tenho certeza de como bom os dois pontos vai funcionar).
Daniel Beck
2
@gasan As aspas simples não funcionam porque não permitem a substituição de comandos ou qualquer outra interpretação. Veja citando no manual do Bash.
slhck
2
@gasan A diferença é que o conteúdo de aspas simples não é avaliado. Experimente com echo "$HOME"e echo '$HOME'. Por isso sugeri o uso de ".
Daniel Beck
0

Você pode usar um comando mais simples

touch $(date | tr ' ' '-')
Omar Mardini
fonte
Um pouco menos elegante e sem dúvida menos portátil, mas, sim, isso também funcionará.
Scott
OK, já que sei que você está lendo isso, irei detalhar um pouco mais: a resposta de Daniel fornece um resultado em um formato conhecido e totalmente controlado. (1) A saída de datenormalmente mostra o tempo como hh: mm: ss. Sua resposta resulta em nomes de arquivos que contêm dois pontos. Isso pode causar um erro nos sistemas de arquivos baseados no Windows. (2) A saída bruta de uma chamada simples de dateé dependente da localidade; ou seja, personalizado para o idioma local. Tente LANG=de_DE datee LANG=fr_FR dateveja exemplos. ... (continua)
Scott
(Continua)… (2a) Portanto, no evento (improvável?), Você muda o idioma do seu sistema ou entrega seu script e uma coleção de arquivos de dados do seu sistema a alguém cujo sistema está configurado para um linguagem diferente, haverá uma incompatibilidade. (Não tenho certeza de que isso seria um problema real, mas seria um problema estético.) (2b) Não conheço nenhum local que faça isso, mas teoricamente poderia haver um local onde dateescreva a data como mm / dd / aa (ou dd / mm / aa). ... (continua)
Scott
(Continua) ... Se você já encontrou esse sistema, teria nomes de arquivos contendo barras, o que causará erros. (3) A resposta de Daniel dá um resultado em que a ordem lexicográfica (ou seja, alfabética), produzida por lsou *, corresponde à ordem cronológica. Com sua resposta, todos os Friarquivos estarão no início de qualquer lista lexicograficamente classificada Apre Augaparecerão antes de todos os outros meses.
Scott