web-dev-qa-db-fra.com

Comment trouver et supprimer des pistes de musique en double?

Mon problème est que, pour une raison quelconque, j'ai des copies de certaines pistes de musique. Cependant, ils ne portent pas le même nom. Par exemple:

Music/Prefuse 73/Un mot extincteur/07. Detchibe.mp3

Et

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

Notez que ce sont des morceaux en double mais le 07 * . * & le 07 - trompe les chercheurs de doublons qui effectuent une recherche par fichier des noms.

8
John McKean Pruitt

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

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

Ceci utilisait fdupes pour rechercher récursivement (-r) les dupes, en omettant le premier (-f). Bash lit ceci ligne par ligne à travers read AMD remet chaque ligne à mv pour déplacer tous les doublons dans un autre répertoire. Notez l'utilisation de guillemets dans la boucle while pour gérer les espaces et autres signes de ponctuation louche que fdupes ne gérera pas (même avec -1/--sameline).

2

Vous pouvez utiliser fdupes comme réponse à la question "Comment trouver et supprimer des fichiers en double" suggéré. 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 je lance fdupes -rd, le logiciel trouve les deux fichiers exacts et demande lequel il convient de supprimer.

Si vous avez beaucoup de fichiers, vous pouvez utiliser l'option -1. fdupes imprimera tous les doublons sur une seule ligne. Vous pouvez les traiter avec xargs et d'autres fonctionnalités de Shell.

2
qbi

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, 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. Si vous souhaitez ignorer d'autres caractères, ajoutez-les à la requête de la même manière. (IE ajoute replace( avant le premier "remplacer" existant et après le dernier ")" sur cette ligne, ajoutez , '[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 s'il y en a, je ne le sais pas.

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

Option n ° 1: les noms de fichiers contiennent un 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 contenant la liste des noms de fichiers est enregistré dans le dossier parent. Par exemple, si votre liste de fichiers a été enregistrée dans /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 avec la liste). Cela devrait cracher une liste de tous les fichiers que vous souhaitez supprimer. Prenez un moment pour vé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é.

1
David Oneill