rsync -avn, find … -print y git clean -nd imprimen exactamente lo que haría la versión destructiva, y de ella los separa un solo flag. El hábito es siempre el mismo: ejecutar en modo "enséñamelo", leer la lista y quitar el flag. La excepción es rm: no tiene ese modo, y el rodeo importa.
1. rsync: -n muestra qué se copiaría
$ clai muestra qué copiaría rsync sin copiarlo→ rsync -avn src/ backup/sending incremental file listapp.pyutil.pylogs/logs/app.logsent 159 bytes received 29 bytes 376.00 bytes/sectotal size is 8 speedup is 0.04 (DRY RUN)
Las dos últimas palabras, (DRY RUN), son la única diferencia en la salida. La lista de archivos es idéntica a la del envío real: quita el -n y se copian exactamente esos.
2. rsync --delete: la combinación que muerde
$ clai muestra qué borraría rsync en el destino→ rsync -avn --delete src/ backup/sending incremental file listdeleting old-report.csvdeleting obsolete.py./notes.txtutil.pylogs/old.log
Las líneas deleting son el motivo entero para molestarse con -n. Sin él, esos dos archivos desaparecen en silencio — verificado: la misma orden sin -n imprimió las mismas dos líneas y los eliminó.
3. find: primero -print, después -delete
$ clai muestra los logs de más de 30 días sin borrarlos→ find src -name '*.log' -mtime +30 -printsrc/logs/old.log
find evalúa sus condiciones de izquierda a derecha, así que -print al final muestra precisamente la lista que recibiría -delete. Nunca los intercambies: -delete -name '*.log' borra primero todo el árbol y filtra después.
4. git clean: -n imprime lo que eliminaría
$ clai muestra qué archivos sin seguimiento eliminaría git clean→ git clean -ndWould remove backup/Would remove src/notes.txtWould remove tmpdir/
-n es la comprobación y -d incluye directorios. Lanzar git clean -fd sin la pasada previa con -nd es la forma más rápida de perder un archivo que olvidaste añadir al índice.
5. sed: la vista previa es sed sin -i
$ clai muestra cómo quedaría el reemplazo en conf.ini sin cambiar el archivo→ sed 's/old/new/' conf.inihost=newport=80
Sin -i, sed imprime el resultado en el terminal y no toca el archivo: ese es su modo en seco de fábrica. Verificado: cat conf.ini después sigue mostrando host=old.
6. Cuando la edición sí entra, guarda una copia
$ clai reemplaza en conf.ini pero guarda una copia de seguridad→ sed -i.bak 's/old/new/' conf.ini
Al lado aparece conf.ini.bak con el contenido original. En macOS el sufijo es obligatorio aunque esté vacío (-i ''), el detalle que rompe los scripts traídos de Linux.
Gotchas
rmno tiene modo en seco. El sustituto es el mismo patrón conls:ls -1 src/logs/*.logmuestra exactamente lo que se llevaríarm src/logs/*.log. También sirveecho rm …, que imprime el comando completo en vez de ejecutarlo.-nsignifica cosas distintas según el comando. En rsync es modo en seco, engrep -nnúmeros de línea, ensort -norden numérico. No traslades la costumbre a ciegas: en find la comprobación es-printy en git es--dry-run.- La comprobación y la ejecución deben diferir en un solo flag. Si además cambiaste la ruta, el patrón o el orden de los argumentos, comprobaste otro comando. Borra el
-nde la línea que ya escribiste en lugar de teclearla de nuevo.
Related questions
¿Los gestores de paquetes tienen modo en seco? Sí: apt-get -s install paquete muestra el plan sin instalar, dnf tiene --assumeno y docker docker system prune --dry-run.
¿Cómo compruebo qué hará un script? bash -n script.sh revisa la sintaxis sin ejecutar nada; bash -x script.sh imprime cada comando mientras corre — ojo, los ejecuta.
¿Se puede deshacer rsync --delete? No. Las protecciones son -n de antemano o --backup --backup-dir=…, que aparta los archivos condenados en vez de borrarlos.
See also
- Borrar archivos con más de N días
- Copiar archivos conservando la estructura de carpetas
- Buscar y reemplazar en todos los archivos
CliAI marca un comando destructivo como CAUTION o DANGER y ofrece antes su forma en seco. Instálalo en una línea.