Como encontro e excluo faixas de música duplicadas?

8

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 / Prefuso 73 / Extintor de Uma Palavra / 07. Detchibe.mp3

&

Music / Prefuse 73 / Extintor de uma palavra / 07 - Detchibe.mp3

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

John McKean Pruitt
fonte
2
Você já tentou alguma das sugestões aqui ?
JPD
Os fdupes podem destacar uma das duas duplicatas e excluí-la? Caso contrário, o comando fdupes -r gera apenas uma lista que não me leva a lugar algum.
John McKean Pruitt
Isso responde sua pergunta? Como encontro músicas duplicadas?
karel

Respostas:

2

Você pode usar fdupescomo a resposta da pergunta »Como encontrar e excluir arquivos duplicados« sugeridos. 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 criei um arquivo a partir de dados aleatórios e copiei seu conteúdo para outros arquivos. Quando executo, fdupes -rdo software encontra os dois arquivos exatos e pergunta qual deles excluir.

Se você tem muitos arquivos, você pode usar a opção -1. fdupesimprimirá todas as duplicatas em uma única linha. Você pode processá-los com xargse outros recursos do shell.

qbi
fonte
A saída do comando fdupes -r pode ser canalizada para o comando mv?
John McKean Pruitt
O fdupes -rd está próximo do que eu quero, mas precisarei pressionar um cerca de 2000 vezes para que todos os idiotas sejam eliminados.
John McKean Pruitt
11
Eu adicionei um parágrafo à minha resposta acima.
QBI
A questão aqui é que fdupesparece não mergulhar em subpastas. Por exemplo, ~/Desktop/Dupes2/há uma pasta chamada Blood Sugar Sex Magik com os Dupes, mas um fdupes -rcomando simples não retorna nenhuma lista.
John McKean Pruitt
2

Encontrei uma cadeia de comandos um tanto simples. Muito obrigado a @Oli.

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

Isso costumava encontrar fdupesrecursivamente ( -r) os dupes, omitindo o primeiro ( -f). O Bash lê essa linha por linha, através de readamd, em cada linha, mvpara mover todas as duplicatas para outro diretório. Observe o uso de aspas no whileloop para manipular espaços e outras pontuações desonestas que fdupesnão manipulam (mesmo com -1/ --sameline).

John McKean Pruitt
fonte
@ Oli, isso não está fazendo o truque. Não arquivos estão sendo movidos de uma pasta para a outra
John McKean Pruitt
@ Oli veja meu último comentário para "qbi" abaixo.
John McKean Pruitt
1

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

Depois de conectar-se ao banco de dados, na tabela executar consulta, 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 string SQL e clique em 'executar consulta'. Isso mostrará todas as faixas que você possui com o mesmo título, ignorando espaços, traços e pontos. Se houver outros caracteres que você deseja ignorar, inclua-os na consulta no mesmo padrão. ( replace(Antes de adicionar o IE antes do primeiro "substituir" e depois do último ")" nessa linha, adicione , '[character you want removed]', '').

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

Isso lhe dará uma lista de títulos. Você terá que realmente excluir você mesmo.

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

Depois de ter uma grande lista de arquivos a serem excluídos (do meu método ou de fdupesoutros mencionados), coloque a lista de arquivos que deseja excluir em um diretório de texto. Verifique se um dos seguintes é verdadeiro:

Opção 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 nº 2: os nomes de arquivos contêm o caminho relativo e o arquivo com a lista de nomes de arquivos é salvo na pasta pai. Por exemplo, se sua lista de arquivos foi salva /home/doneill/music/, ela conteria:

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

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

Digitar:

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

(Substituindo filelist.txt pelo nome do arquivo pela lista). Isso deve citar uma lista de todos os arquivos que você deseja excluir. Reserve um momento para verificar 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 do arquivo filelist.txt, remova um arquivo com o nome listado.

David Oneill
fonte
A pergunta é sobre arquivos duplicados, sem menção ao Banshee.
JPD
2
@jpd É banshee marcado ...
David Oneill
Desculpe, perdi completamente as tags.
JPD
Não consigo acessar o banco de dados da banshee porque a 11.10 não tem a opção de abrir com um comando personalizado e a solução alternativa sugerida não funcionou - fui jogado pela toca do coelho por um segundo, mas estou de volta sem solução.
John McKean Pruitt
11
@JohnMcKeanPruitt 1) ​​Execute o navegador de banco de dados sqlite (o comando é sqlitebrowserse não for colocado no menu quando você o instalar). 2) Arquivo -> Abrir. 3) Digite /home/[user]/.config/banshee-1/na barra de endereço 'Examinar' (substitua [usuário] pelo seu nome de usuário). 4) Clique duas vezes em banshee.db.
David Oneill