Eu tenho vários arquivos de mídia como os abaixo:
tvshow.s01e11]Bloodlines.avi
tvshow.s01e12]suffer.avi
tvshow.s01e13]NotMe.avi
Eu gostaria de renomeá-los para
tvshow.s01e11.avi
tvshow.s01e12.avi
tvshow.s01e13.avi
Eu tentei usar renomear, mas evidentemente não estou conseguindo a sintaxe correta, porque ela falha.
krename
é adorável. Ele tem todos os tipos de opções poderosas e mostra o que ele fará antes que realmente o faça. Você pode usá-lo para testar padrões que você pode usar no bash mais tarde.Respostas:
Isso renomeará os arquivos. Você precisa \ w * para indicar qualquer número de caracteres alfanuméricos.
Referência: http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#UsingSimpleWildcards
fonte
rename
utilitário Perl , não aquele com o mesmo nome do util-linux . Veja aqui e aquiNo shell, pode-se fazer simplesmente:
O shell pode produzir uma lista dos nomes de arquivos com apenas um glob regular e
${var%pattern}
remove o padrão de correspondência (mais curto) do final da string na variávelvar
. Como a extensão final é sempre.avi
, eu apenas a removi com o padrão e a adicionei novamente. Com as aspas, isso também deve funcionar com nomes de arquivos que contenham espaços, comoFancy Name for a Show.s01e01]Asdf.avi
fonte
${x/]*([^.])}
deveria fazer, remove um suporte e qualquer número de não-pontos. (embora não se há outras faixas ou pontos, uma vez que não está bloqueado para o final do string)${x/]*.avi}
e adicionei um.avi
como você. Mas eu também estava insatisfeito com a forma como os espaços no nome iriam se romper(`find . -name '*]*.avi'`)
. Fiquei feliz em fornecer um método limitado limitado de comando unix, já que renomear não é, mas isso explode o meu na água.Isso é impraticável - as outras respostas são muito mais rápidas e curtas - mas ...
Você pode usar o PowerShell! A Microsoft fez o código-fonte aberto recentemente e o tornou multiplataforma. Para obter instruções sobre downloads e instalação do seu sistema operacional, consulte a seção "Obter PowerShell" .
Depois de instalá-lo, você pode usar este breve script:
Basicamente, ele percorre cada objeto no diretório atual que corresponde a um arquivo
*]*.avi
, obtém a peça antes do colchete, recolhe-o.avi
novamente e atribui isso como o novo nome.Para executá-lo diretamente do Bash, use este liner semi-golfado:
As citações que escapam são cortesia desta resposta do Stack Overflow .
(Testado no Bash no Ubuntu no Windows. Provavelmente, existe uma maneira muito mais curta de fazer isso com o PowerShell, mas eu queria mostrar algo compreensível para as pessoas que não conhecem expressões regulares.)
fonte
O Debian possui 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 do código-fonte, caso contrário. Ele permite que você escreva isso:
Você pode ler a página de manual do Ubuntu para este comando para obter mais detalhes.
fonte
Isso procurará o padrão e substituirá o texto usando sed.
fonte