Como criar scripts para essa função de renomeação em massa?

1

Existem 4 pastas no meu diretório de trabalho atual. Cada pasta contém vários arquivos nomeados com o seguinte formato:

HEXA DECA - Season 01 Episode 01 - name of episode
HEXA DECA - Season 01 Episode 02 - name of episode

Eu quero renomeá-lo para:

HE'XA DECA - S01E01 - name of episode
HE'XA DECA - S01E02 - name of episode

sed é um pouco assustador para mim. Qual é a melhor maneira de conseguir isso?

    
por Sam Fischer 06.01.2017 / 10:40

3 respostas

1

Descobri que vidir é a solução mais flexível e transparente para esses problemas. Lá você apenas edita o arquivo de texto com nomes de arquivos por qualquer meio (no VIM ou outro editor), e as mudanças se aplicam.

    
por 06.01.2017 / 11:12
0

Pessoalmente, uso mmv para esse tipo de tarefa. Outros usam rename . Minha tentativa (não testada, obviamente, então tente primeiro com a opção -n ):

for dir in ....; do
    ( cd "$dir"; mmv -r "HEXA DECA - Season ?? Episode ?? - *" "HE'XA DECA - S#1#2E#3#4 - #5" )
done

Eu cd primeiro em $dir em vez de mmv "$dir/..." , o que também é possível. Isso evita situações em que seu diretório pode conter caracteres especiais de mmv, como ? ou * .

    
por 06.01.2017 / 10:47
0
O comando

rename faz o que você precisa:

find . -type f -exec rename "s/^(.*\/)HEXA DECA - Season ([0-9]*) Episode ([0-9]*) (.*)\$/\HE'XA DECA - S\E\ \/" {} \; 

Precisamos de backslashes 'cos entre aspas simples ' não pode ser escapado, mas entre aspas duplas devemos escapar do caracter $ .

Aqui, encontramos todos os arquivos no diretório e nos subdiretórios e tentamos renomeá-los.

s/regexp/smth substituirá todas as correspondências regexp por smth .

^(.*\/) é a primeira parte do caminho, tudo sem nome base, salvo em \ .

HEXA DECA - Season e Episode são partes que não são salvas, mas são modelos para correspondência.

([0-9]*) s é o número da temporada e do episódio, salvo em \ e \ .

(.*)$ é a última parte da string, contém o nome do episódio, \ .

Na segunda parte de s/// , substituímos \$N s em padrão, como queremos vê-los.

    
por 06.01.2017 / 11:03