typestar

backup_rotate.sh en Bash

Conservar los tres respaldos más nuevos, borrar el resto, probarlo.

#!/usr/bin/env bash
# backup_rotate: deja los tres respaldos más nuevos del archivo, borra el resto
set -euo pipefail

work=$(mktemp -d)
trap 'rm -rf "$work"' EXIT
cd "$work"

echo "content" > data.txt

# simula cinco respaldos con fecha
for stamp in 0501 0502 0503 0504 0505; do
    cp data.txt "data.txt.2026${stamp}.bak"
done

echo "before:"
ls data.txt.*.bak

# sobreviven los tres más nuevos; ls ordena los nombres, tail quita el resto
keep=3
ls data.txt.*.bak | head -n -"$keep" | while IFS= read -r old; do
    rm "$old"
    echo "removed $old"
done

echo "after:"
ls data.txt.*.bak
echo "$(ls data.txt.*.bak | wc -l) backups kept"

Cómo funciona

  1. Los nombres .bak con fecha se ordenan bien por nombre solo.
  2. head -n -3 entrega todo excepto los últimos tres.
  3. El bucle while-read elimina y reporta cada baja.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
28
Caracteres a escribir
626
Tokens
94
Ritmo de tres estrellas
80 tpm

Al ritmo de tres estrellas de 80 tokens por minuto, este intento toma unos 70 segundos.

Escribe este fragmento

Paso 2 de 2 en Bis; paso 26 de 26 en Fundamentos del lenguaje.

← Anterior