// DevOps
Búsqueda y reemplazo seguros: cómo no dañar los binarios
Publicado el 30.12.2025
Al trabajar con proyectos reales (cambio de CDN, migración, refactorización) a menudo es necesario reemplazar en masa una URL por otra.
A primera vista la tarea parece trivial: sed -i 's|old|new|g' **/* — y listo.
En realidad ese enfoque es una ruleta rusa.
Un reemplazo descuidado conduce a:
- 💀 Daño de archivos binarios (imágenes, pdf, archivos);
- 📉 Basura en el historial de git (los binarios aparecen como modificados);
- 🚫 Imposibilidad de una reversión limpia si no se hizo un respaldo.
En esta nota analizaremos un algoritmo apto para producción: cambiamos solo texto, no tocamos binarios, hacemos un respaldo puntual.
Datos iniciales
- URL antiguo:
https://static-old.example-cdn.net - URL nuevo:
https://cdn-new.example-storage.net - Contexto: Proyecto con contenido mixto (HTML, JS, YAML + PNG, JPG, WOFF2).
🛠 Algoritmo de acciones
1. Preparación y búsqueda (Dry Run)
La herramienta clave es grep -I (ignora archivos binarios, incluso si en ellos los bytes coinciden con la cadena).
Primero solo veamos qué vamos a cambiar:
# Buscamos recursivamente, ignoramos binarios, mostramos la lista de archivos
grep -rIl 'https://static-old.example-cdn.net' .
Importante: asegúrate de que en la lista solo haya archivos de texto (no imágenes, fuentes, etc.). Si todo parece correcto — seguimos.
2. Creamos un backup “inteligente”
No copiamos todo el proyecto — eso es lento y ocupa espacio. Guardamos solo los archivos que contienen la cadena buscada, preservando la jerarquía y los metadatos.
SEARCH="https://static-old.example-cdn.net"
BACKUP_DIR="backup_before_replace"
mkdir -p "$BACKUP_DIR"
# Copiamos solo los archivos que coinciden
find . -type f -print0 \
| xargs -0 grep -Il "$SEARCH" \
| xargs -I{} sh -c 'mkdir -p "$BACKUP_DIR/$(dirname "{}")" && cp -p "{}" "$BACKUP_DIR/{}"'
Ahora en backup_before_replace hay una copia exacta solo de los archivos que se modificarán. La reversión es copiar de vuelta.
3. Realizamos el reemplazo (Safe Replace)
sed -i funciona de forma diferente en Linux (GNU) y macOS (BSD):
- Linux:
sed -i 's/old/new/g' - macOS:
sed -i '' 's/old/new/g'
Para que el script funcione en todas partes (local, en CI, en Mac/Linux), usamos perl — es idéntico en todos los sistemas *nix.
OLD="https://static-old.example-cdn.net"
NEW="https://cdn-new.example-storage.net"
find . -type f -not -path "./$BACKUP_DIR/*" -print0 \
| xargs -0 grep -Il "$OLD" \
| xargs -0 perl -pi -e "s|\Q$OLD\E|$NEW|g"
\Q y \E escapan automáticamente todos los caracteres especiales en la URL (puntos, barras, guiones) — no hace falta escapar manualmente.
4. Verificación (Verification)
Comprobamos que todo se realizó con éxito:
# Debe devolver salida vacía
grep -rIl "$OLD" . --exclude-dir="$BACKUP_DIR"
# Debe mostrar los archivos modificados (ejemplo: primeros 5)
grep -rIl "$NEW" . --exclude-dir="$BACKUP_DIR" | head -n 5
Además se puede ejecutar git status o git diff --stat para ver los cambios reales.
💡 Por qué esto es correcto
grep -I— protección fiable contra la corrupción de binarios.- Copia de seguridad puntual — guardamos solo la delta, ahorrando espacio y tiempo.
perlen lugar desed— estabilidad multiplataforma (Linux, macOS, CI).- Variables y pasos claros — el script es fácil de leer y adaptar.
TL;DR — Snippet listo para «aquí y ahora»
Pégalo en la terminal y reemplaza tus URL:
SEARCH="https://static-old.example-cdn.net"
REPLACE="https://cdn-new.example-storage.net"
BACKUP="backup_$(date +%s)"
mkdir -p "$BACKUP"
# 1. Copia de seguridad puntual solo de los archivos con coincidencia
find . -type f -print0 \
| xargs -0 grep -Il "$SEARCH" \
| xargs -I{} sh -c 'mkdir -p "$BACKUP/$(dirname "{}")" && cp -p "{}" "$BACKUP/{}"'
# 2. Reemplazo seguro (perl — funciona en Linux y macOS)
find . -type f -not -path "./$BACKUP/*" -print0 \
| xargs -0 grep -Il "$SEARCH" \
| xargs -0 perl -pi -e "s|\Q$SEARCH\E|$REPLACE|g"
echo "Готово! Бэкап сохранён в папке $BACKUP"
echo "Откат (если нужно): cp -r $BACKUP/. ."
Este enfoque está comprobado en producción — seguro, fiable y universal. ¡Buena suerte con las migraciones! 🚀
// Reviews
Reseñas relacionadas
Llegué con una solicitud costosa para la configuración de un servidor VPS, pero durante la consulta Mikhail propuso una solución mucho más sencilla y económica. Al final ahorré dinero y tiempo. Mikhail — un verdadero experto que trabaja por el resultado del cliente, no por la factura. ¡Lo recomiendo!
Llegué con una solicitud costosa para la configuración de un servidor VPS, pero durante la consulta Mikhail propuso una solución mucho más simple y económica. Al final ahorré presupuesto y tiempo. Mikhail es un …
Configuración de VPS, configuración del servidor
12.05.2026 · ★ 5/5
¡Excelente trabajo! Configuró el servidor muy rápido, instaló el panel y configuró la IP. ¡Sin duda lo recomiendo!
¡Excelente trabajo! Muy rápido configuró el servidor, instaló el panel y configuró la IP. ¡Sin duda lo recomiendo!
Configuración de VPS, configuración del servidor
19.04.2026 · ★ 5/5
Todo perfecto, ayudó de forma rápida y profesional, gracias, lo recomiendo a la comunidad
Todo perfecto, ayudó de forma rápida y profesional, gracias, lo recomiendo a la comunidad
Configuración de VPS, configuración del servidor
16.04.2026 · ★ 5/5
Hubo varios problemas, tanto en la parte técnica como en la comprensión general. Mijaíl respondió rápido a la solicitud, ayudó a aclarar las cosas y resolvió los problemas técnicos; por ello, muchas gracias. Estoy satisfecho con el resultado.
Hubo varios problemas relacionados tanto con la parte técnica como con la comprensión en general. Mijaíl respondió rápidamente a la solicitud, ayudó a aclarar las cosas y resolvió los problemas técnicos, por lo que le …
Configuración de VPS, configuración del servidor
18.02.2026 · ★ 5/5
Todo se hizo de manera rápida y precisa. Lo recomiendo.
Todo se hizo rápido y con precisión. Lo recomiendo.
Configuración de VPS, configuración del servidor
17.01.2026 · ★ 5/5
Todo salió bien, el profesional respondió rápidamente a las preguntas y ayudó a resolver el problema. ¡Gracias!
Todo fue bien, el profesional respondió rápidamente a las preguntas y ayudó a resolver el problema. ¡Gracias!
Configuración de VPS, configuración del servidor
16.12.2025 · ★ 5/5
// Contact
¿Necesitas ayuda?
Escríbeme y te ayudaré a resolver el problema
// Related