grep
s параметр -l
только произведет имена файлов, которые соответствуют $PATTERN
, wc
может считать их впоследствии.
grep -l "$PATTERN" * | wc -l
Это - основанное на Perl rename
найденный на Debian, Ubuntu и производных, судящих синтаксисом. Вы не можете использовать tr
оператор, потому что это действует на целую строку. Но можно соответствовать расширению и нижнему регистру это с \L
.
rename 's/\.[^.]*$/\L$&/' *.JPG *.MOV
Здесь является ненужным, но если бы regexp соответствовал больше, чем часть, которую Вы хотите к нижнему регистру, то Вы могли поместить часть, которая будет согласована в группе:
rename 's/\.([^.]*)$/.\L$1/' *.JPG *.MOV
Замена *.JPG *.MOV
*.*
действовать на все файлы независимо от расширения. В ударе ≥4.3 (и также в ударе 4.0–4.2, с протестом, что это также пересекает символьные ссылки на каталоги), можно легко действовать на файлы в подкаталогах и так далее рекурсивно:
rename 's/\.[^.]*$/\L$&/' **/*.*
Для zsh вентиляторов ( :r
и :e
модификаторы изолируют расширение от остальной части файла):
autoload zmv
zmv '*.(MOV|JPG)' '${f:r}.${(L)f:e}' # these extensions, current directory
zmv '*.*' '${f:r}.${(L)f:e}' # all extensions, current directory
zmv '**/*.*' '${f:r}.${(L)f:e}' # all extensions, recursive directory traversal
:r
и:e
в zsh? Они делают команду более простой. – Gilles 'SO- stop being evil' 19.05.2017, 13:44$f
, который не был зарегистрирован. Теперь я решил, что буду использовать$f
так или иначе, и я вижу, что это было наконец добавлено к документации. – Gilles 'SO- stop being evil' 19.05.2017, 14:06