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
- Los nombres
.bakcon fecha se ordenan bien por nombre solo. head -n -3entrega todo excepto los últimos tres.- El bucle while-read elimina y reporta cada baja.
Palabras clave y builtins usados aquí
cddodoneechoforinreadsettrapwhile
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.
Paso 2 de 2 en Bis; paso 26 de 26 en Fundamentos del lenguaje.