Isso renomeia os arquivos. Você precisa do \ w * para indicar qualquer número de caracteres alfanuméricos.
rename 's/\]\w*//' *
Referência: link
Eu tenho vários arquivos de mídia como os abaixo:
tvshow.s01e11]Bloodlines.avi
tvshow.s01e12]suffer.avi
tvshow.s01e13]NotMe.avi
Gostaria de renomeá-los para
tvshow.s01e11.avi
tvshow.s01e12.avi
tvshow.s01e13.avi
Eu tentei usar renomear, mas, evidentemente, não estou acertando na sintaxe porque ela falha.
Isso renomeia os arquivos. Você precisa do \ w * para indicar qualquer número de caracteres alfanuméricos.
rename 's/\]\w*//' *
Referência: link
No shell, pode-se fazer simplesmente:
for x in *]*.avi ; do
mv -i "$x" "${x%]*.avi}.avi"
done
O shell pode produzir uma lista dos nomes de arquivos com apenas uma glob regular, e
${var%pattern}
remove o padrão de correspondência (mais curto) do final da string na variável var
. Como a extensão final é sempre .avi
, acabei de removê-la com o padrão e a adicionei de volta. Com as aspas, isso também deve funcionar com nomes de arquivos contendo espaços, como Fancy Name for a Show.s01e01]Asdf.avi
Isso é totalmente impraticável - as outras respostas são muito mais rápidas e curtas - mas ...
Você pode usar o PowerShell! A Microsoft abriu o código-fonte recentemente e transformou isso em uma plataforma cruzada. Para obter downloads e instruções de instalação para seu sistema operacional, consulte a seção "Obter PowerShell" .
Uma vez instalado, você pode usar este breve script:
Get-ChildItem -File '*]*.avi' | ForEach-Object {
Rename-Item $_ -NewName (($_.Name -Split ']')[0] + '.avi')
}
Basicamente, ele passa por cada objeto no diretório atual que é um arquivo correspondente a *]*.avi
, obtém a parte antes do colchete, coloca .avi
de volta nela e atribui isso como o novo nome.
Para executá-lo diretamente do Bash, use este one-liner semi-golfado:
powershell -command $'gci -File \'*]*.avi\'|%{rename-item $_ -NewName (($_.Name -Split \']\')[0]+\'.avi\')}'
Cite como escapar da cortesia esta resposta do Stack Overflow .
(Testado no Bash no Ubuntu no Windows. Há provavelmente uma forma muito mais curta de fazer isso com o PowerShell, mas eu queria mostrar algo compreensível para pessoas que não conhecem expressões regulares.)
O Debian tem um pacote chamado mmv que também pode estar disponível em outras distribuições, e deve ser fácil o suficiente para compilar a partir da fonte, se não. Ele permite que você escreva isso:
mmv '*]*.avi' '#1.avi'
Você pode ler a página do manual do Ubuntu para obter mais detalhes sobre este comando.
Isso irá procurar o padrão e substituir o texto usando sed.
$sed 's/\(.*]\)[a-zA-z0-9].*\(.avi\)//' filename