Однострочный Perl для переименования всех обычных файлов в нижний регистр:
perl -le 'use File::Find; find({wanted=>sub{-f && rename($_, lc)}}, "/path/to/files");'
Если вы хотите более точно определить, какие файлы переименованы, вы можете изменить -f
на регулярное выражение или что-то в этом роде:
perl -le 'use File::Find; find({wanted=>sub{/\.(txt|htm|blah)$/i && rename($_, lc)}}, "/path/to/files");'
РЕДАКТИРОВАТЬ: Извините, после перечитывания вопроса, я вижу, вы также хотите заменить вхождения в файлах:
find /path/to/files -name "*.html" -exec perl -pi -e 's/\b(src|href)="(.+)"/$1="\L$2"/gi;' {} \;
РЕДАКТИРОВАТЬ 2: Попробуйте это, поскольку команда find
использует +
вместо \;
, что более эффективно, поскольку несколько файлов передаются в perl одновременно (благодаря @ikegami из другого поста). Он также обрабатывает '
и "
вокруг URL. Наконец, он использует {}
вместо //
для подстановок, поскольку вы подставляете URL (возможно, /
в URL вводят в заблуждение perl или вашу оболочку?) Это не должно иметь значения, и я попробовал оба в моей системе с одинаковым эффектом (оба работали нормально), но это стоит попробовать:
find . -name "*.html" -exec perl -pi -e \
'$q=qr/"|\x39/; s{\b(src|href)=($q?.+$q?)\b}{$1=\L$2}gi;' {} +
PS: У меня также есть Macbook, и я протестировал его, используя оболочку bash с Perl версий 5.8.9 и 5.10.0.