
Eu tenho dezenas de arquivos como:
title.mkv]-[72+167] - "" yEnc 637005001 (1+889)
Eu gostaria de remover tudo depois de ".mkv"
Tentei procurar algumas regex que me ajudassem, mas não entendo como usá-las.
Alguém poderia me ajudar?
Responder1
Nota sobre rename
, prename
etc. veja:
- Por que o utilitário de renomeação no Debian/Ubuntu é diferente daquele em outras distribuições, como o CentOS?
- O que há com todas as renomeações: pré-nomear, renomear, renomear arquivo?
Nesta resposta, a variante Perl é usada, não a única forma util-linux. Como não:
$ rename --version
rename from util-linux 2.31.1
mas:
$ rename --version
/usr/bin/rename using File::Rename version 0.20
ou similar.
Com Perl renomear:
rename 's/\.mkv.*/.mkv/s' ./*.mkv*
Use a -n
opção primeiro para ter certeza de que ela faz o que você deseja.
rename -n 's/\.mkv.*/.mkv/s' ./*.mkv*
Resumidamente:
s/\.mkv.*/.mkv/s
é:
substitute/<THIS>/<WITH THIS>/s
\.mkv.*
corresponde a um ponto literal, \.
depois à string mkv
e, finalmente, a qualquer caractere (inclusive \n
para o qual você precisa do s
sinalizador) zero ou mais vezes .*
.
O resultado é substituir .mkv<anything>
por .mkv
.
Existem ferramentas para ajudar na leitura e na construção de expressões, comohttps://regex101.com/
Responder2
em bash
:
for f in *; do [[ "$f" =~ ^.+\.mkv ]] && mv "$f" "${BASH_REMATCH[0]}"; done
Responder3
Comzsh
dezmv
:
autoload zmv
zmv -v '(*.mkv)*' '$1'
Remove a peça após omais à direitaocorrência de .mkv
no nome do arquivo (renomeia foo.mkv-bar.mkv-whatever
para foo.mkv-bar.mkv
).
Para omais à esquerdaocorrência (para renomear esse arquivo foo.mkv
), você pode substituir *.mkv
por *.mkv~*.mkv?*
qual corresponde a uma string que termina em, .mkv
mas que também não contém .mkv
seguido por pelo menos um caractere usando o ~
"exceto"operador global.
Responder4
Em uma festa de script
#!/bin/bash
for i in *.mkv*
do
j=$(echo "$i" | sed -e 's/\.mkv.*$/.mkv/')
mv -- "$i" "$j"
done