Remova parte do nome após regex

Remova parte do nome após regex

Eu tenho vários arquivos de vídeo usando um esquema de nomenclatura como

algumas palavras-SxxExx.extensão

qual é a minha preferência. Infelizmente tenho muitos arquivos neste formato

algumas-palavras-SxxExx-palavras-que-quero-remover.extensão

Preciso remover automaticamente tudo após a parte Exx.

Responder1

Assumindo que xos são espaços reservados, zmvdeve ser possível fazer isso com 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

Você também pode usar '(*S[0-9][0-9]E[0-9][0-9])*.ext'apenas para combinar dígitos no lugar de x.

Ou se você quiser usar 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

ou com o comando Perl rename(que aparentemente agora é chamado file-renameno Debian):

file-rename -n -v 's/(S[0-9]{2}E[0-9]{2}).*\.ext/$1.ext/' *.ext

(Remova a echofrente mve os -nsinalizadores de zmve file-renamepara realmente fazer as renomeações. mv -npor outro lado, diz para não sobrescrever os arquivos existentes, isso funciona pelo menos em GNU mv.)

Responder2

Que tal

$ echo 'some-words-SxxExx-words-I-want-to-remove.extension' | sed 's/\(S..E..\)[^.]*/\1/'
some-words-SxxExx.extension

(embora eu espere que um aficionado por zsh seja capaz de fazer isso de maneira mais simples usando a substituição de shell).

informação relacionada