
He hecho este sencillo script:
#/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
Tengo un problema con la última línea del script. El comando rm no funciona, no elimina el archivo. La fecha "Hace 2 horas" funciona muy bien, así que no hay problema con esto.
Respuesta1
Parece especificar el nombre del archivo de dos maneras diferentes:
DATE=$(date --date="2 hours ago" +"%d-%m-%Y_%H")
Arriba aparece, por ejemplo, un _ entre el año y la hora.
Pero la fecha que generaste tenía un formato diferente:
DATE=$(date +"%d_%m_%Y-%H:%M:%S")
Sin embargo, esto todavía no resolvería el problema inherente de conseguir "una fechamás o menoshace dos horas", porque se tarda un solo segundo en pasar de 13:00:00 a 12:59:59, lo que de todos modos no coincide con el patrón "2017-11-20_13*".
Yo consideraría usar find
:
find . -name "*.tar" -maxdepth 0 -cmin +120 -delete
debería eliminar todos los archivos *.tar en el directorio actual que tengan más de dos horas (use +119 para tener un tiempo de gracia de un minuto). Además, puede omitirlo -delete
al probar si este enfoque funciona.
Respuesta2
Creo que el problema está en la expansión de la $DATE
variable en la última línea. Para probar esto, simplemente puede agregar un echo
delante del rm
comando y ejecutar el script, o puede intentar evitar el problema usando ${DATE}
en lugar de solo $DATE
en el rm
comando.
El problema también podría ser que estás intentando eliminar un nombre de archivo que no existe, ya que parece que tienes dos formatos de salida de fecha diferentes especificados, y supongo que se supone que los formatos de fecha coinciden entre la creación del archivo tar. archivo y la eliminación dos horas más tarde.