
У меня есть несколько видеофайлов, использующих такую схему именования:
некоторые-слова-SxxExx.расширение
что мне больше нравится. К сожалению, у меня много файлов в этом формате
некоторые-слова-SxxExx-слова-Я-хочу-удалить.расширение
Мне нужно автоматически удалить все после части Exx.
решение1
Предполагая, что x
' являются заполнителями, zmv
это можно сделать с помощью
zmv -nv '(*S??E??)*.ext' '$1.ext'
% touch foo-S01E02-garbage.ext bar-S07E17-moregarbage.ext
% zmv -nv '(*S??E??)*.ext' '$1.ext'
mv -- bar-S07E17-moregarbage.ext bar-S07E17.ext
mv -- foo-S01E02-garbage.ext foo-S01E02.ext
Вы также можете использовать '(*S[0-9][0-9]E[0-9][0-9])*.ext'
для сопоставления цифр вместо x
.
Или если вы хотите использовать sed
:
for f in *.ext; do
echo mv -n "$f" "$(echo "$f" | sed -e 's/\(S[0-9][0-9]E[0-9][0-9]\).*\.ext/\1.ext/')"
done
или с помощью команды Perl rename
(которая, по-видимому, теперь называется file-rename
в Debian):
file-rename -n -v 's/(S[0-9]{2}E[0-9]{2}).*\.ext/$1.ext/' *.ext
(Удалите echo
from перед mv
и -n
флаги из zmv
и , file-rename
чтобы фактически выполнить переименование. mv -n
С другой стороны, это говорит ему не перезаписывать существующие файлы, это работает, по крайней мере, в GNU mv
.)
решение2
Как насчет
$ echo 'some-words-SxxExx-words-I-want-to-remove.extension' | sed 's/\(S..E..\)[^.]*/\1/'
some-words-SxxExx.extension
(хотя я ожидаю, что поклонник zsh сможет сделать это проще, используя подстановку оболочки).