[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Reemplazar dentro de archivos



On Tue, 2003-02-25 at 11:15, Willy Walker wrote:
> Lo que me gustaría es un comando que me permitiera que buscar en todos los 
> archivos de un Directorio, en este caso del nuevo usuario, y sustituir la 
> ruta antigua por la nueva, y el nombre de usuario antiguo por el nuevo.

grep -lr 'viejo' 'dir' | xargs -n 1 -iX sh -c \
 "echo 'X'; sed 's|viejo|nuevo|g' 'X' > 'X.new' && mv 'X.new' 'X'"

Donde 'dir' es el directorio base, debajo del cual quieres procesar
todos los archivos; 'viejo' es la cadena que quieres reemplazar; 'nuevo'
es el reemplazo.  Las comillas son por si alguna de éstas cadenas
contiene espacios.  'viejo' y 'nuevo' no deben contener pipas ('|'); si
necesitas usar pipas, cambia el separador usado en la expresión del sed.

Si usas '/' como directorio base, ésto procesará todos los archivos en
tu filesystem (mientras tú te vas por un café y un tabaco).

El grep inicial evita que se procesen archivos innecesariamente.  El
echo es para que veas qué archivos se modifican.

Nota que éste es un comando riesgoso.  Te recomiendo probarlo en una
copia de tu directorio base antes de correrlo "live" (e.g.,
cp -r /etc /tmp/etc, reemplaza sobre /tmp/etc, diff -u /etc /tmp/etc,
verifica que no haya hecho barbaridades).

A ver si a alguien se le ocurre una manera más bonita.

 -CR




Reply to: