Como localizo e excluo faixas de música duplicadas?

7

Meu problema é que, por algum motivo, tenho duplicatas de algumas faixas de música. No entanto, eles não são nomeados de forma idêntica. Por exemplo:

  

Música / Prefuse 73 / Extintor de Uma Palavra / 07. Detchibe.mp3

e

  

Música / Prefuse 73 / Extintor de uma palavra / 07 - Detchibe.mp3

Observe que são músicas duplicadas, mas as 07 * . * & amp; o 07 - está enganando os localizadores de arquivos duplicados que pesquisam com base nos nomes dos arquivos.

    
por John McKean Pruitt 28.03.2012 / 19:13

3 respostas

2

Você pode usar fdupes como a resposta para a pergunta "Como encontrar e apague arquivos duplicados " sugerido. Deixe-me dar um exemplo:

mkdir -p "Music/Prefuse 73/One Word Extinguisher/"
dd if=/dev/urandom of=Music/Prefuse\ 73/One\ Word\ Extinguisher/07.Detchibe.mp3 bs=1023 count=2048
  2048+0 records in
  2048+0 records out
  2095104 bytes (2.1 MB) copied, 0.379806 s, 5.5 MB/s
cp Music/Prefuse\ 73/One\ Word\ Extinguisher/07.Detchibe.mp3 Music/Prefuse\ 73/One\ Word\ Extinguisher/"07 - Detchibe.mp3"
fdupes -rd .
  [1] ./Music/Prefuse 73/One Word Extinguisher/07.Detchibe.mp3
  [2] ./Music/Prefuse 73/One Word Extinguisher/07 - Detchibe.mp3

  Set 1 of 1, preserve files [1 - 2, all]:

Primeiro eu criei o diretório como no seu exemplo. Eu fiz um arquivo de dados aleatórios e copiei seu conteúdo para outros arquivos. Quando eu executo fdupes -rd , o software encontra os dois arquivos exatos e pergunta qual deles deletar.

Se você tiver muitos arquivos, poderá usar a opção -1 . fdupes imprimirá todos os duplicados em uma única linha. Você pode processá-los com xargs e outros recursos do shell.

    
por qbi 04.04.2012 / 00:22
2

Eu encontrei uma cadeia de comandos um pouco simples. Muito obrigado a @Oli.

fdupes -rf --quiet ~/Desktop/Dupes2/ | while read i; do mv "$i" ~/Desktop/Dupes/ ; done

Isso usou fdupes para recursivamente ( -r ) encontrar os dupes, omitindo o primeiro ( -f ). Bash lê essa linha por linha, passando read amd e entrega cada linha a mv para mover todas as duplicatas para outro diretório. Observe o uso de aspas no loop while para manipular espaços e outras pontuações problemáticas que fdupes não manipulará (mesmo com -1 / --sameline ).

    
por John McKean Pruitt 04.04.2012 / 19:10
1

Nas respostas a Definir manualmente a contagem de faixas no Banshee? , descreve como obter no banco de dados que o banshee usa para salvar todas as informações da faixa.

Quando estiver conectado ao banco de dados, na tabela de consultas de execução, cole

select tweaked_track, count(*) from 
  (select replace(replace(replace(title, ' ', ''), '-', ''), '.', '') as tweaked_track 
   from coretracks) 
group by tweaked_track 
order by 2, 1 desc;

na caixa de texto SQL, clique em "executar consulta". Isso mostrará todas as faixas que você tem com o mesmo título, ignorando espaços, traços e pontos. Se houver outros caracteres que você deseja ignorar, adicione-os à consulta no mesmo padrão. (IE adicione replace( antes do primeiro "substituir" existente e depois do último ")" nessa linha, adicione , '[character you want removed]', '') .

(Eu não sei o quanto você sabe sobre sql - se você precisar de mais detalhes, poste um comentário.)

Isso lhe dará uma lista de títulos. Você terá que fazer a exclusão sozinho.

Pode haver uma maneira melhor de fazer isso, mas se houver, eu não sei sobre isso.

Uma vez que você tenha uma grande lista de arquivos a serem apagados (seja do meu método ou de fdupes , como os outros mencionaram), coloque a lista de arquivos que você deseja excluir em um diretório de texto. Certifique-se de que uma das seguintes situações seja verdadeira:

Opção nº 1: os nomes dos arquivos contêm o caminho completo. Por exemplo, o arquivo pode conter:

/home/doneill/music/weird_al/duped_file.mp3
/home/doneill/music/weird_al/another_dupe.mp3
/home/doneill/music/bach/baroque_dupe.mp3

Opção 2: Os nomes dos arquivos contêm o caminho relativo e o arquivo com a lista de nomes de arquivos é salvo na pasta pai. Por exemplo, se a sua lista de arquivos foi salva em /home/doneill/music/ , ela conterá:

weird_al/duped_file.mp3
weird_al/another_dupe.mp3
bach/baroque_dupe.mp3

Em ambos os casos, abra uma janela de terminal e mude para a pasta que contém o arquivo com a lista cd /home/doneill/music/ , por exemplo.

Digite:

for a in 'cat filelist.txt'; do echo $a; done

(Substituindo filelist.txt pelo nome do arquivo com a lista). Isso deve mostrar uma lista de todos os arquivos que você deseja excluir. Tome um momento para verificar novamente a lista. Se estiver certo, digite:

for a in 'cat filelist.txt'; do rm $a; done

Isso basicamente diz ao seu computador: para cada linha no arquivo filelist.txt , remova um arquivo com o nome listado.

    
por David Oneill 28.03.2012 / 20:49