CLI AI

"Comprime este directorio y súbelo a S3" — un pipeline de un disparo

2026-02-07

La mitad de los backups ad-hoc tienen la misma forma: agarrar un directorio, comprimirlo, empujarlo fuera del host. A nadie le encanta escribir el pipe a mano. Nombres con fecha, niveles de gzip, los flags correctos de S3 — hay suficiente superficie como para frenar.

El pipeline en un solo prompt

clai
$ clai tar esta carpeta, gzip con sufijo de fecha, sube a s3://team-backups/db/→ tar -czf - . \    | aws s3 cp - "s3://team-backups/db/$(basename "$PWD")-$(date +%Y%m%d-%H%M).tar.gz"upload: <stdin> to s3://team-backups/db/data-20260427-1432.tar.gz

Algunas cosas que vale la pena notar. El archivo va por streaming — tar -czf - escribe en stdout, aws s3 cp - lee de stdin — así no se queda nada en disco local. La key de S3 incluye nombre del directorio y timestamp, que es lo que la mayoría quiere para sus backups.

Añade un guardia "borrar al éxito"

Continuación natural: limpiar el origen si la subida tuvo éxito.

clai
$ clai haz la misma subida y borra la carpeta local si vuelve con código 0→ tar -czf - . \    | aws s3 cp - "s3://team-backups/db/$(basename "$PWD")-$(date +%Y%m%d-%H%M).tar.gz" \    && rm -rf -- "$PWD"[Safety: DANGER] — borrado recursivo del directorio actual.

CliAI marcó la segunda variante DANGER por el rm -rf -- "$PWD" final. El clasificador mira todo el pipeline, no solo la primera etapa. El post de safety explica cómo se toma esa decisión.

Cuando la respuesta correcta no es S3

Cambia el destino — "a gs://my-bucket", "a un host remoto vía rsync", "a mi bucket de Backblaze B2" — y la estructura no cambia. Al pipe le da igual la URL; el modelo elige el cargador correcto.

Ver también