
У меня есть десятки файлов, таких как:
title.mkv]-[72+167] - "" yEnc 637005001 (1+889)
Я хотел бы удалить все после ".mkv"
Я попытался найти какое-нибудь регулярное выражение, которое могло бы мне помочь, но не понимаю, как им пользоваться.
Может ли кто-нибудь мне помочь?
решение1
Примечание по rename
и prename
т.д. см.:
- Почему утилита переименования в Debian/Ubuntu отличается от утилиты в других дистрибутивах, например CentOS?
- Что со всеми этими переименованиями: prename, rename, file-rename?
В этом ответе используется вариант Perl, а не тот, что в форме util-linux. Например, not:
$ rename --version
rename from util-linux 2.31.1
но:
$ rename --version
/usr/bin/rename using File::Rename version 0.20
или похожие.
С помощью Perl переименовать:
rename 's/\.mkv.*/.mkv/s' ./*.mkv*
Сначала воспользуйтесь -n
опцией, чтобы убедиться, что она соответствует вашим требованиям.
rename -n 's/\.mkv.*/.mkv/s' ./*.mkv*
Суммируя:
s/\.mkv.*/.mkv/s
является:
substitute/<THIS>/<WITH THIS>/s
\.mkv.*
соответствует точке, \.
затем строке mkv
и, наконец, любому символу (включая \n
тот, для которого вам нужен s
флаг) ноль или более раз .*
.
Результат — заменить .mkv<anything>
на .mkv
.
Существуют инструменты, помогающие читать и строить выражения, например:https://regex101.com/
решение2
в bash
:
for f in *; do [[ "$f" =~ ^.+\.mkv ]] && mv "$f" "${BASH_REMATCH[0]}"; done
решение3
Сzsh
'szmv
:
autoload zmv
zmv -v '(*.mkv)*' '$1'
Удаляет часть послесамый правыйвхождение .mkv
в имени файла (переименовывает foo.mkv-bar.mkv-whatever
в foo.mkv-bar.mkv
).
Длясамый левыйвхождение (чтобы переименовать этот файл в foo.mkv
вместо этого), вы можете заменить *.mkv
на *.mkv~*.mkv?*
, которое соответствует строке, заканчивающейся на , .mkv
но которая также не содержит , .mkv
за которым следует по крайней мере один символ, используя ~
«кроме»оператор глоб.
решение4
В скрипте bash
#!/bin/bash
for i in *.mkv*
do
j=$(echo "$i" | sed -e 's/\.mkv.*$/.mkv/')
mv -- "$i" "$j"
done