Para o shell bash :
for file in *.avi; do
# use perl to transform the file name; could use 'sed -r' too
new_path=$(perl -pe 's|^(.+?)\.S0*(\d+)E0*(\d+)\.(.+)\.(\w+)$|$1/Season $2/Episode $3 - $4.$5|' <<< "$file")
# create directories if needed
mkdir -p "${new_path%/*}"
# move the file
mv -vn "$file" "$new_path"
done
Neste exemplo de expressão regular ( s|...|...|
):
-
$1
é o nome do programa (tudo até ".S<num>E<num>
"); -
$2
e$3
são números de temporada / episódio; -
$4
é o título do episódio (tudo até a final ".
"); -
$5
é a extensão do arquivo.
Se você deseja manter os zeros iniciais em números de temporada / episódio, substitua S0*
e E0*
apenas por S
e E
. Se você quiser processar outros tipos de arquivo, ajuste *.avi
na primeira linha.
O Debian e o Ubuntu vêm com um script prename
baseado em Perl que pode ser usado para isso, mas não cria novos diretórios automaticamente. É fácil modificá-lo para isso ; então você pode usar apenas prename 'the above regexp' *.avi
.)