Como posso adicionar datetime a um nome de arquivo existente no Linux?

5

Eu quero adicionar data e hora ao nome do arquivo, por exemplo: 08032016out.log.zip

Isso é o que tento fazer:

_now=$(date +"%m_%d_%Y")
_file="$_nowout.log"
touch $_file.txt # creating new file with the timedate

Como posso criar o novo arquivo com o datetime?

    
por yunisdov 08.03.2016 / 08:29

2 respostas

14

Você criou uma variável chamada _now , mas depois referencia uma variável chamada _nowout . Para evitar esses problemas, use chaves para delimitar nomes de variáveis:

_now=$(date +"%m_%d_%Y")
_file="${_now}out.log"
touch "$_file.txt"

Observe que deixei "$_file.txt" como está, porque . já é um delimitador de nomes de variáveis. Em caso de dúvida, "${_file}.txt" poderia ser usado da mesma forma.

Bônus 1: a sintaxe ${varname} fornece várias operações de sequência úteis sobre variáveis, além de delimitar.

Bônus 2: escape e cotação do shell criativo também podem ser usados para delimitar nomes de variáveis. Você pode citar a variável e o literal de string separadamente (por exemplo, file="$_now""out.log" ou file="$_now"'out.log' ) ou deixar uma das partes sem aspas (ou seja, file=$_now"out.log" ou file="$_now"out.log ). Finalmente, você pode escapar de um único caractere que segue o nome da variável: file=$_now\out.log . Embora eu não recomende a reutilização desses exemplos sem um bom entendimento das regras de citação e escape do shell.

    
por 08.03.2016 / 08:42
9

Você precisa especificar os limites do nome da variável.

_file será definido como $_nowout.log , mas o shell não poderá determinar se você quer dizer $_now ou $_nowout .

Use

_file="${_now}out.log"

para usar explicitamente a variável $_now .

Então o script se torna:

_now=$(date +"%m_%d_%Y")
_file="${_now}out.log"
touch "${_file}.txt"

Que, para o registro, pode ser encurtado para:

touch "$(date +%m_%d_%Y)out.txt"
    
por 08.03.2016 / 08:43