Suponho que, manualmente, você não quer excluí-los um de cada vez.
No Windows, você pode fazer isso simplesmente indo até o nível superior dos diretórios de arquivos de música e digitando:
DEL *.mp4 /S
O sinalizador '/ S' exclui os arquivos não apenas no diretório atual, mas também em todos os subdiretórios.
No Linux, também no diretório principal, você digitaria:
find . -name '*.mp4' -exec /usr/bin/rm '{}' \;
Use o caminho completo para 'rm' para que você não acabe usando um alias como 'rm -i'. Além disso, as chaves estão entre aspas, caso você tenha nomes de arquivos com espaços.
OK, então o SO é o Windows, e é possível que o MP4 seja a versão somente de uma faixa, caso em que não queremos apagá-lo.
Dado que, deduplicate.bat se pareceria com:
@ECHO OFF
FOR /F "usebackq delims=" %%i in ( 'dir /b /s *.mp4' ) do (
IF EXIST "%%~dpni.mp3" (
DEL "%%i"
)
)
Isto é, faça uma listagem de diretórios recursivos de todos os arquivos MP4. Para cada arquivo MP4 encontrado, verifique se existe um arquivo MP3 correspondente. Isso é feito combinando
- %% ~ di A letra da unidade
- %% ~ pi O caminho do arquivo
- %% ~ ni O nome do arquivo, excluindo a extensão
em %% ~ dpni e, em seguida, adicionando a extensão ".mp3". Ao fazer isso, garantimos que os arquivos MP4 e MP3, se existirem, estejam no mesmo diretório, cuidando do problema que você mencionou em seu comentário acima de um arquivo MP3 de um determinado nome e um arquivo MP4 do mesmo nome, mas em um diretório diferente.
Portanto, se o arquivo MP3 existir, o arquivo MP4 será duplicado e poderá ser excluído com segurança.
E, por completo, ...
Notas
- As aspas são necessárias em toda a estrutura do nome do arquivo em caso haja espaços no nome.
- Os sinais de porcentagem duplicados são porque estão em um arquivo. Se você fosse para digitar isso em uma janela de console, cada instância de " %% " tornar-se um único '% '.