Для простого однострочного с -n
или -p
, вы хотите
perl -i~ -pe 's/foo/bar/' *.aspx
-i~
говорит, что нужно изменить каждый целевой файл на месте и оставить оригинал в качестве резервной копии с суффиксом ~
, добавленным к имени файла. (Опустите суффикс, чтобы не оставлять резервную копию. Но если вы все еще учитесь или экспериментируете, это плохая идея; удаление резервных копий, когда вы закончите, - намного меньше хлопот, чем восстановление оригиналов из резервной копии, если вы что-то испортили. )
Если ваш Perl-код слишком сложен для однострочного (или просто достаточно полезен, чтобы его можно было многократно использовать), очевидно, замените -e '# your code here'
на scriptname.pl
... хотя тогда может быть рефакторинг scriptname.pl
, чтобы он принимал список аргументы имени файла и просто используйте scriptname.pl *.aspx
, чтобы запустить его для всех файлов *.aspx
в текущем каталоге.
Если вам нужно просмотреть структуру каталогов и найти все файлы с определенным шаблоном именования, полезна утилита find
.
find . -name '*.aspx' -exec perl -pi~ -e 's/foo/bar/' {} +
Если ваш find
не поддерживает -exec ... +
, попробуйте с -exec ... \;
, хотя это будет медленнее и запустит больше процессов (по одному на каждый файл, а не как можно меньше для обработки всех файлов).
Чтобы сканировать только некоторые каталоги, замените .
(который называет текущий каталог) разделенным пробелами списком проверяемых каталогов или даже используйте find
, чтобы найти сами каталоги (а затем, возможно, изучить * 1028). * для выполнения действий в каждом каталоге, который find
выбирает с помощью вашего сложного, запутанного, критически важного для бизнеса, может быть, секретного списка предикатов find
)
Может быть, также изучить find2perl
, чтобы сделать эту рекурсию каталога изначально в Perl.