
Eu fiz este script simples:
#/bin/bash
DATE=$(date +"%d_%m_%Y-%H:%M:%S")
tar -czvf /kopie/bin-$DATE.tar /bin
DATE=$(date --date="2 hours ago" +"%d-%m-%Y_%H")
rm -f /kopie/bin-$DATE*.tar
Tenho problemas com a última linha do script. O comando rm não funciona, não exclui o arquivo. A data “2 horas atrás” funciona muito bem, então não há problema com isso.
Responder1
Você parece especificar o nome do arquivo de duas maneiras diferentes:
DATE=$(date --date="2 hours ago" +"%d-%m-%Y_%H")
Acima, há, por exemplo, um _ entre o ano e a hora.
Mas a data que você gerou tinha um formato diferente:
DATE=$(date +"%d_%m_%Y-%H:%M:%S")
No entanto, isso ainda não resolveria o problema inerente de conseguir "um encontromais ou menosduas horas atrás", porque leva um único segundo para ir de 13:00:00 a 12:59:59, o que não corresponde ao padrão "2017-11-20_13*" de qualquer maneira.
Eu gostaria de usar find
:
find . -name "*.tar" -maxdepth 0 -cmin +120 -delete
deve eliminar todos os arquivos *.tar no diretório atual com mais de duas horas (use +119 para ter um minuto de tolerância). Além disso, você pode omitir -delete
ao testar se essa abordagem funciona.
Responder2
Acredito que o problema esteja na expansão da $DATE
variável na última linha. Para testar isso, você pode simplesmente adicionar um echo
na frente do rm
comando e executar o script, ou pode tentar evitar o problema usando ${DATE}
em vez de apenas $DATE
no rm
comando.
O problema também pode ser que você está tentando excluir um nome de arquivo que não existe, já que parece ter dois formatos de saída de data diferentes especificados, e presumo que os formatos de data devam corresponder entre a criação do tar arquivo e a exclusão duas horas depois.