Você pode usar o sed para remover as duplicatas da string:
for f in *; do
r=$(echo $f | sed -r "s/(.*)(\{Sci-Fi\}|\{Science Fiction\})(.*)(\{Sci-Fi\}|\{Science Fiction\})(.*)//g");
echo $r;
done
Substitua echo $f
por mv "$f" "$r"
se você gostar da saída.
A linha sed
acima pegará a primeira palavra correspondente e removerá a segunda, se você quiser sempre priorizar Sci-Fi
sobre Science Fiction
, mesmo quando apenas Science Fiction
existir, você poderá fazer isso em duas etapas:
for f in *; do
r=$(echo $f | sed "s/{Science Fiction}/{Sci-Fi}/");
s=$(echo $r | sed -r "s/(.*)(\{Sci-Fi\})(.*)(\{Sci-Fi\})(.*)//g");
if [ "$f" != "$s" ]; then
echo "moving " $f " to " $s
fi
done