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.