Batch renomeia nomes extensos de arquivos de tamanho variável com anos

1

Eu tenho um monte de arquivos em um único diretório que gostaria de renomear da seguinte forma, por exemplo, nomes existentes:

1937 - Snow White and the Seven Dwarves.avi
1940 - Pinocchio.avi

Nomes de alvos:

Snow White and the Seven Dwarves (1937).avi
Pinocchio (1940).avi

Felicidades

    
por imnegan 03.02.2016 / 23:50

2 respostas

1

Se você tiver o rename baseado em Perl (às vezes conhecido como prename ), isso é realmente possível. Se você entende Expressões Regulares, é ainda mais simples.

rename -n 's!^(\d+) - (.*)\.(...)$!$2 ($1).$3!' *.avi

O que isso faz é dividir o nome do arquivo de origem em três componentes. Usando seu primeiro exemplo, estes seriam

  • 1937
  • Branca de Neve e os Sete Anões
  • avi

Estes são atribuídos a $1 , $2 , $3 dentro do comando rename . (Estas não são bash variáveis.) Em seguida, as reúne novamente na ordem diferente.

Quando estiver satisfeito com o resultado proposto, altere o -n para -v ou remova-o completamente.

    
por 04.02.2016 / 00:13
1

é assim que eu faria usando apenas o bash

cd movie_directory
ls -1 | while read line
do
  year=$(echo ${line} | awk '{print $1}')
  name=$(echo ${line} | cut -d " " -f 3- | cut -d"." -f 1)
  ext=$(echo ${line} | cut -d " " -f 3- | cut -d"." -f 2)
  newname=${name}" ("${year}")."${ext}
  mv "${line}" "${newname}"
done

suposições:

nomes de arquivos não contêm .
os caracteres de espaço entre o ano e - e o nome do arquivo são, na verdade, espaços em branco, não tab ou algum outro caractere não imprimível.

    
por 04.02.2016 / 00:24