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.
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?
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.
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 * .
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.