Para un simple de una sola línea con -n
o -p
, desea
perl -i~ -pe 's/foo/bar/' *.aspx
El -i~
dice a modificar cada archivo de destino en su lugar, y dejar el original como una copia de seguridad con un sufijo ~
añadido al archivo nombre. (Omita el sufijo para no dejar una copia de seguridad. Pero si todavía está aprendiendo o experimentando, esa es una mala idea; eliminar las copias de seguridad cuando haya terminado es mucho más pequeño que restaurar los originales desde una copia de seguridad si se estropea algo).)
Si el código Perl es demasiado complejo para una sola línea (o simplemente lo suficientemente útil para ser reutilizables), obviamente, reemplazar -e '# your code here'
con scriptname.pl
... aunque entonces tal refactor scriptname.pl
para que acepte una lista de argumentos de nombre de archivo, y simplemente use scriptname.pl *.aspx
para ejecutarlo en todos los archivos *.aspx
en el directorio actual.
Si necesita repetir una estructura de directorio y encontrar todos los archivos con un patrón de nomenclatura particular, la utilidad find
es útil.
find . -name '*.aspx' -exec perl -pi~ -e 's/foo/bar/' {} +
Si su find
no soporta -exec ... +
intento con -exec ... \;
aunque será más lenta y poner en marcha más procesos (uno por cada archivo que encuentre en lugar de la menor cantidad posible de procesar todos los archivos).
para analizar sólo algunos directorios, reemplace .
(que da nombre al directorio actual) con una lista separada por espacios de los directorios para examinar, o incluso utilizar find
para encontrar los mismos (y tal vez explorar -execdir
para hacer algo en directorios cada directorio que find
selecciona con su complejo, intrincado, crítico para el negocio, tal vez la lista secreta de find
predicados de opción).
Quizás también explore find2perl
para hacer esta recursión de directorio nativamente en Perl.
Ver http://stackoverflow.com/questions/506009/ scanning-multiple-files-in-perl – daotoad
¿Es posible exportar la salida a un archivo en lugar de tenerlo en el terminal? –