
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 x
os são espaços reservados, zmv
deve 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-rename
no Debian):
file-rename -n -v 's/(S[0-9]{2}E[0-9]{2}).*\.ext/$1.ext/' *.ext
(Remova a echo
frente mv
e os -n
sinalizadores de zmv
e file-rename
para realmente fazer as renomeações. mv -n
por 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).