Como unir duas coleções de ROMs preservando as versões traduzidas (sem duplicatas)

Publicado por Xerxes em 16/09/2025

[ Hits: 119 ]

 


Como unir duas coleções de ROMs preservando as versões traduzidas (sem duplicatas)



Olá!

Muitos de nós que gostamos de emulação temos o mesmo "problema": uma pasta com nossas ROMs favoritas, cuidadosamente traduzidas para o português, e outra pasta com uma coleção maior, com as versões originais (americanas, japonesas, etc.).

O desafio é: como podemos copiar os jogos que faltam da coleção original para a nossa coleção traduzida, sem substituir as traduções que já temos e sem criar duplicatas?

Por exemplo, queremos que o script ignore o Contra (USA).zip da pasta de originais se já tivermos um Contra.zip na nossa pasta de traduções.

Um simples cp não resolve, pois os nomes dos arquivos são diferentes. A solução é usar um script em Bash que "pensa" antes de copiar.

A Lógica da Solução

A ideia é criar um script que, para cada jogo na pasta de ROMs originais, siga estes passos:

1. Normaliza o Nome: Ele pega o nome do arquivo, como Double Dragon (USA).zip, e remove todas as informações extras (como (USA), (Japan), (Rev 1)) e a extensão .zip, resultando em um nome "limpo", como Double Dragon.

2. Verifica a Existência: O script então procura na sua pasta de ROMs traduzidas se já existe algum arquivo que comece com esse nome limpo.

3. Toma a Decisão:
  • Se o jogo já existe na sua coleção, ele é ignorado, preservando sua versão traduzida.
  • Se o jogo não existe, ele é considerado um novo título para a sua coleção.

Criando o Script Interativo

Para tornar o processo seguro, nosso script primeiro fará uma análise completa, listará todos os arquivos que seriam copiados e, no final, pedirá sua confirmação antes de mover um único arquivo.

Vamos ao passo a passo:

1. Abra o terminal (Ctrl + Alt + T).

2. Crie o arquivo que conterá nosso script com o seu editor de texto preferido. Vamos usar o nano:
nano merge_roms.sh

3. Agora, cole o código do script que será apresentado no final deste dica dentro do editor nano.

4. Dentro do script, você precisará alterar as duas primeiras linhas para indicar os caminhos corretos das suas pastas de ROMs:
PASTA1="/caminho/para/sua/pasta_traduzida"
PASTA2="/caminho/para/sua/pasta_originais"

5. Após colar e editar os caminhos, salve o arquivo e saia do nano pressionando Ctrl + X, depois Y e, por fim, Enter.

6. Agora, dê a permissão de execução para o seu novo script:
chmod +x merge_roms.sh

7. Tudo pronto! Execute o script com:
./merge_roms.sh

O script irá analisar tudo e, ao final, perguntará se você deseja prosseguir. Se tudo estiver correto, digite prossiga e tecle Enter para ver sua coleção de ROMs ficar ainda mais completa!

Espero que esta dica seja útil.

Segue o script:

#!/bin/bash

# --- CONFIGURAÇÃO ---
# !!! IMPORTANTE: Altere os caminhos abaixo para os caminhos corretos das suas pastas !!!
PASTA1="/media/xerxes/MMPLUS/Roms/FC"  # Pasta de destino (suas ROMs traduzidas)
PASTA2="/home/xerxes/Downloads/tiny-best-set-go-games/Roms/FC" # Pasta de origem (ROMs não traduzidas)
# --------------------


# Verifica se os diretórios existem
if [ ! -d "$PASTA1" ] || [ ! -d "$PASTA2" ]; then
    echo "❌ Erro: Um ou ambos os diretórios não foram encontrados. Verifique os caminhos no script."
    exit 1
fi

echo "Pasta de ROMs Traduzidas (Destino): $PASTA1"
echo "Pasta de ROMs Originais (Origem):  $PASTA2"
echo "-----------------------------------------------------"
echo "🔎 Fase 1: Analisando quais jogos da Pasta 2 podem ser copiados..."
echo "-----------------------------------------------------"

# Array para armazenar a lista de jogos a serem copiados
JOGOS_A_COPIAR=()

# Loop através de cada arquivo .zip na Pasta 2
for JOGO_ORIGEM in "$PASTA2"/*.zip; do
    
    # Pega apenas o nome do arquivo, sem o caminho
    NOME_ARQUIVO_ORIGEM=$(basename "$JOGO_ORIGEM")
    
    # Normaliza o nome: remove tudo a partir do primeiro parêntese ou colchete
    # e também remove a extensão .zip
    NOME_NORMALIZADO=$(echo "$NOME_ARQUIVO_ORIGEM" | sed -E 's/ \(.+\)//g; s/ \[.+\]//g; s/\.zip$//')
    
    # Verifica se um arquivo com o nome normalizado já existe na Pasta 1
    EXISTE_NA_PASTA1=$(find "$PASTA1" -maxdepth 1 -type f -name "$NOME_NORMALIZADO*.zip" | head -n 1)
    
    if [ -z "$EXISTE_NA_PASTA1" ]; then
        # Se a variável estiver vazia, o jogo não existe na Pasta 1
        echo "  [+] Adicionar à lista de cópia: '$NOME_ARQUIVO_ORIGEM'"
        JOGOS_A_COPIAR+=("$JOGO_ORIGEM")
    else
        # O jogo já existe, então não fazemos nada
        :
    fi
done

echo "-----------------------------------------------------"
echo "✨ Análise concluída!"
echo ""

# Verifica se há jogos para copiar
if [ ${#JOGOS_A_COPIAR[@]} -eq 0 ]; then
    echo "Nenhum jogo novo para copiar. Sua coleção já está completa!"
    exit 0
fi

echo "Serão copiados ${#JOGOS_A_COPIAR[@]} novos jogos para a sua coleção."
echo ""
read -p "Deseja prosseguir com a cópia? (digite 'prossiga' e pressione Enter): " CONFIRMACAO

# Verifica a confirmação do usuário
if [ "$CONFIRMACAO" == "prossiga" ]; then
    echo ""
    echo "🚀 Iniciando a cópia..."
    for JOGO_PARA_COPIAR in "${JOGOS_A_COPIAR[@]}"; do
        cp -v "$JOGO_PARA_COPIAR" "$PASTA1/"
    done
    echo ""
    echo "✅ Cópia concluída com sucesso!"
else
    echo ""
    echo "❌ Operação cancelada pelo usuário. Nenhum arquivo foi copiado."
fi
Outras dicas deste autor

Teclado Brasileiro no Funtoo pelo Xorg

Instalando sua impressora HP no LinuxMint

Buscando palavras (strings) em arquivos dentro de diretório recursivamente

Atualização para kernel 4.0.1 no Elementary OS

Documentário: Indie Game - The Movie

Leitura recomendada

Instalação do emulador mednafen no Slackware 14.2

Melhorando o desempenho do cliente legendary (Epic Games Launcher)

Quake 2 no Ubuntu 10.10

Cube 2: Collect Edition (jogo FPS)

Efeitos de luz, sombra e reflexo no DOOM clássico

  

Comentários

Nenhum coment�rio foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts