Sou iniciante em Linux e preciso de ajuda para criar um script bash para criar um arquivo com uma data específica no nome do arquivo.
Tenho um diretório chamado /backups/
, no qual gostaria de criar um arquivo de acordo com a data e hora atuais com algum texto de prefixo, como /backups/backup_2023_09_15_14_00_00.txt
. Essa parte já está respondida aqui ).
O problema é que desejo remover o arquivo de backup anterior se já existir um (que seria nomeado de acordo com o formato backup_****_**_**_**_**_**.txt
) e se a criação do novo arquivo foi bem-sucedida.
Existe uma maneira de fazer algo assim?
O
bash
fragmento de script a seguir usaria a lista de parâmetros posicionais (veja mais abaixo uma variante que usa uma matriz nomeada) para armazenar todos os nomes de caminhos de backups antigos. Quando o novo backup for criado, aqui simulado usandotouch
, os backups antigos lembrados serão excluídos.Usando uma matriz nomeada para armazenar os arquivos de backup antigos em vez da lista de parâmetros posicionais. O código é idêntico, exceto pela atribuição
oldfiles
e pelas expansões usadas comrm
e para produzir a saída de depuração.Em vez de encerrar o script se o novo backup não for criado com sucesso, poderíamos fazer a remoção dos arquivos antigos em uma
if
instrução, por exemplo,Se você deseja apenas um único arquivo de backup, é fácil - o pseudocódigo é assim:
Se
create new backup file
for simplesmente uma questão de copiar um único arquivo pequeno, então isso provavelmente é um exagero - é improvável que falhe. Nesse caso, basta excluir os arquivos existentes antes de criar o novo. Mas criar um grande arquivo tar/cpio ou descarregar para o servidor traseiro é outra coisa.Mas isso é um pouco chato. Que tal manter vários arquivos de backup? Se você sabe que eles serão criados regularmente, você pode fazer o seguinte:
que manteria os arquivos criados (ou modificados) nos últimos 7 dias.
Ou se você quiser manter várias versões (12 abaixo)....
Você pode fazer assim: