Hay varias posibilidades:
Utilización de la búsqueda:
Utilización de la búsqueda para crear una lista de todos los archivos, y luego a llevarlas por sed
o el correo quivalente, como se sugiere en la respuesta a la que hace referencia, es bastante sencillo y solo requiere escanear los archivos una vez.
Utilizaría una de las mismas respuestas que las de la pregunta que mencionó, pero agregando -path '*/.svn' -prune -o
después del find .
para eliminar los directorios SVN. Vea this question para una discusión sobre el uso de la opción prune
con find
, aunque tenga en cuenta que tienen el patrón equivocado. Por lo tanto, para imprimir todos los archivos, se debería utilizar:
find . -path '*/.svn' -prune -o -type f -print
A continuación, se puede canalizar de que en una llamada o xargs
que ver las sustituciones individuales, como se sugiere en la pregunta que se hace referencia. Hay mucha discusión sobre las diferentes opciones que hay, que no voy a reproducir aquí, aunque yo prefiero la versión de John Zwinck's answer:
find . -path '*/.svn' -prune -o -type f -exec sed -i 's/foo/bar/g' {} +
El uso de grep recursivo:
Si tiene un sistema con GNU grep, puede usar eso para encontrar la lista de archivos también. Esta es probablemente menos eficiente que encontrar, pero sí permite que sólo se permite llamar sed
sobre los archivos que coinciden, y yo personalmente encontrar la sintaxis mucho más fácil de recordar (o la figura hacia fuera de las páginas de manual):
sed -i 's/foo/bar/g' `grep -l -R --exclude-dir='*/.svn' 'foo' .`
El La opción -l
hace que grep solo muestre la lista de nombres de archivo, en lugar de las líneas correspondientes.
Con un editor de interfaz gráfica de usuario:
Alternativamente, si usted está utilizando ventanas, hacer lo que hago - obtener una copia del editor Notetab (disponible en una versión gratuita), y utilizar su Buscar- and-replace-on-disk, que ignora automáticamente los directorios .svn ocultos y simplemente funciona.
Editar: corregido patrón hallazgo a */.svn
en lugar de .svn
, añade más detalles y algunas otras posibilidades. Sin embargo, esto depende de su plataforma y la versión svn: .svn
sin */
puede ser necesario en algunos casos, como en CentOS 7.
Creo que estás diciendo que hagas esto: encontrar. -path '.svn' -prune -o -type f -print Pero eso no parece funcionar. –
Eso es lo que estaba diciendo que hicieras, y tienes razón, no funciona. Creo que ya descubrí por qué, y corregiré para corregir. –
Cuando hago el grep recursivo en CentOS 7, sigo recibiendo directorios .svn. Si en su lugar pongo '--exclude-dir = '. Svn'' se van. – Kev