Comment trouver et supprimer des morceaux de musique en double?


8

Mon problème est que, pour une raison quelconque, j'ai des doublons de certains morceaux de musique. Cependant, ils ne sont pas nommés de manière identique. Par exemple:

Musique / Prefuse 73 / One Word Extincteur / 07. Detchibe.mp3

&

Musique / Prefuse 73 / One Word Extincteur / 07 - Detchibe.mp3

Notez que ce sont des chansons en double mais le 07 * . * & le 07 - trompe les trouveurs de fichiers en double qui recherchent en fonction des noms de fichiers.


2
Avez-vous essayé l'une des suggestions ici ?
jpd

Les fdupes peuvent-ils isoler l'un des deux doublons et le supprimer? Sinon, la commande fdupes -r ne génère qu'une liste qui ne me mène nulle part.
John McKean Pruitt

Est-ce que cela répond à votre question? Comment trouver des chansons en double?
karel

Réponses:


2

Vous pouvez utiliser fdupescomme la réponse à la question »Comment trouver et supprimer les fichiers en double« suggérée. Laissez-moi vous donner un exemple:

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]:

J'ai d'abord créé le répertoire comme dans votre exemple. J'ai créé un fichier à partir de données aléatoires et copié son contenu dans un autre fichier. Lorsque j'exécute, fdupes -rdle logiciel trouve les deux fichiers exacts et demande lequel supprimer.

Si vous avez beaucoup de fichiers, vous pouvez utiliser l'option -1. fdupesimprimera tous les doublons sur une seule ligne. Vous pouvez les traiter avec xargset d'autres fonctionnalités du shell.


La sortie de la commande fdupes -r peut-elle être canalisée vers la commande mv?
John McKean Pruitt

fdupes -rd est proche de ce que je veux mais je devrai appuyer sur environ 2000 fois pour que toutes les dupes disparaissent.
John McKean Pruitt

1
J'ai ajouté un paragraphe à ma réponse ci-dessus.
qbi

Le problème ici est qu'il fdupesne semble pas plonger dans les sous-dossiers. Par exemple, il ~/Desktop/Dupes2/contient un dossier intitulé Blood Sugar Sex Magik with the Dupes, mais une simple fdupes -rcommande ne renvoie aucune liste.
John McKean Pruitt

2

J'ai trouvé une chaîne de commande quelque peu simple. Merci beaucoup à @Oli.

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

Cela permet fdupesde -rtrouver récursivement ( ) les dupes, en omettant le premier ( -f). Bash lit cette ligne ligne par ligne à travers readamd remet chaque ligne mvpour déplacer tous les doublons vers un autre répertoire. Notez l'utilisation de guillemets dans la whileboucle pour gérer les espaces et autres signes de ponctuation douteux qui fdupesne seront pas gérés (même avec -1/ --sameline).


@Oli, cela ne fait pas l'affaire. Aucun fichier n'est déplacé d'un dossier à l'autre
John McKean Pruitt

@Oli voir mon dernier commentaire à "qbi" ci-dessous.
John McKean Pruitt

1

Dans les réponses à Définir manuellement le nombre d'écoute de piste dans Banshee? , il décrit comment accéder à la base de données utilisée par banshee pour enregistrer toutes les informations de piste.

Une fois que vous êtes connecté à la base de données, sur la table d'exécution des requêtes, collez

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

dans la zone de chaîne SQL, puis cliquez sur «exécuter la requête». Cela vous montrera toutes les pistes que vous avez avec le même titre en ignorant les espaces, les tirets et les points. S'il y a d'autres caractères que vous souhaitez ignorer, ajoutez-les à la requête selon le même modèle. (IE ajouter replace(avant le premier "remplacer" existant et après le dernier ")" sur cette ligne, ajouter , '[character you want removed]', '').

(Je ne sais pas ce que vous savez sur sql - si vous avez besoin de plus de détails, postez un commentaire.)

Cela vous donnera une liste de titres. Vous devrez réellement supprimer vous-même.

Il y a peut-être une meilleure façon de le faire, mais si c'est le cas, je n'en sais rien.

Une fois que vous avez une grande liste de fichiers à supprimer (soit de ma méthode, soit de celle fdupesque d'autres ont mentionnée), mettez la liste des fichiers que vous souhaitez supprimer dans un répertoire de texte. Assurez-vous que l'une des conditions suivantes est vraie:

Option # 1: Les noms de fichiers contiennent le chemin complet. Par exemple, le fichier peut contenir:

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

Option n ° 2: les noms de fichiers contiennent un chemin relatif et le fichier avec la liste des noms de fichiers est enregistré dans le dossier parent. Par exemple, si votre liste de fichiers a été enregistrée /home/doneill/music/, elle contiendrait:

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

Dans les deux cas, ouvrez une fenêtre de terminal et accédez au dossier contenant le fichier avec la liste cd /home/doneill/music/par exemple.

Tapez:

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

(Remplacement de filelist.txt par le nom du fichier par la liste). Cela devrait cracher une liste de tous les fichiers que vous souhaitez supprimer. Prenez un moment pour revérifier la liste. Si c'est le cas, tapez:

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

Cela indique essentiellement à votre ordinateur: pour chaque ligne du fichier filelist.txt, supprimez un fichier portant le nom indiqué.


La question porte sur les fichiers en double, aucune mention de Banshee.
jpd

2
@jpd C'est tagué banshee ...
David Oneill

Désolé, vous avez complètement raté les balises.
jpd

Je ne peux pas accéder à la base de données Banshee car 11.10 n'a pas la possibilité de s'ouvrir avec une commande personnalisée et la solution de contournement a suggéré que cela ne fonctionnait pas - j'ai été jeté dans le trou du lapin là-bas pendant une seconde mais je suis de retour sans solution.
John McKean Pruitt

1
@JohnMcKeanPruitt 1) ​​Exécutez le navigateur de base de données sqlite (la commande est sqlitebrowsersi elle n'est pas placée dans votre menu lorsque vous l'installez). 2) Fichier -> Ouvrir. 3) Tapez /home/[user]/.config/banshee-1/dans la barre d'adresse «Rechercher dans» (remplacez [utilisateur] par votre nom d'utilisateur). 4) Double-cliquez sur banshee.db.
David Oneill
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.