
Tengo un gran conjunto de archivos en los que necesito reemplazar un esquema de URL completo. Algunos nombres de archivos contienen espacios. Después de mucha búsqueda y análisis y errores, esto es lo más cerca que he estado:
find /somedir -type f -print0 -exec sed -i'' -e 's#http\\:\\/\\/domain.com#https\\:\\/\\/www.domain.com#g' {} +
Al archivo resultante se le ha http:
eliminado el esquema, dejando el //
- es decir, '//www.dominio.com'
Además, se crea un archivo NUEVO, que se agrega -e
al nombre del archivo. - es decir some file.php-e
, que obviamente no es deseado.
Si bien esto ciertamente sería suficiente (después de eliminar los *-e
archivos, el TOC que hay en mí realmente quiere saber cómo hacerlo correctamente. Nota: estoy trabajando localmente en una Mac pero también lo haré en Linux.
¡Cualquier idea es muy apreciada!
Respuesta1
Solución 1: Una forma es usar find
con xargs
:
find /dir -type f -print0 | xargs -0 sed -i 's#http://domain.com#https://www.domain.com#g'
Solución 2: Otro sería usar find
con -exec
, muy similar a tu pregunta:
find /dir -type f -exec sed -i 's#http://domain.com#https://www.domain.com#g' {} +
Ambas soluciones llamarán sed
con varios archivos como argumentos. So sed
no se llama una vez para cada archivo, sino para cada conjunto de archivos.
Solución 3: En lugar de sed
, también puedes usar perl
para buscar-reemplazar-trabajo:
perl -i -pe 's#http://domain.com#https://www.domain.com#g' file
Combinado con el comando find
/ xargs
:
find /dir -type f -print0 | xargs -0 perl -i -pe 's#http://domain.com#https://www.domain.com#g'