Wie finde und lösche ich doppelte Musiktitel?

8

Mein Problem ist, dass ich aus irgendeinem Grund Duplikate einiger Musiktitel habe. Sie sind jedoch nicht identisch benannt. Zum Beispiel:

Musik / Prefuse 73 / Ein-Wort-Löscher / 07. Detchibe.mp3

&

Musik / Prefuse 73 / Ein-Wort-Löscher / 07 - Detchibe.mp3

Beachten Sie, dass es sich um doppelte Songs handelt, aber um die 07 * . * & the 07 - betrügt doppelte Dateisucher, die anhand von Dateinamen suchen.

John McKean Pruitt
quelle
2
Haben Sie einen der Vorschläge hier ausprobiert ?
JPD
Können fdupes eines der beiden Duplikate auswählen und löschen? Andernfalls generiert der Befehl fdupes -r nur eine Liste, die mich nicht weiter bringt.
John McKean Pruitt

Antworten:

2

Sie können fdupeswie die Antwort auf die Frage »So finden und löschen Sie doppelte Dateien« vorgeschlagen. Lassen Sie mich ein Beispiel geben:

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

Zuerst habe ich das Verzeichnis wie in Ihrem Beispiel erstellt. Ich habe eine Datei aus zufälligen Daten erstellt und deren Inhalt in andere Dateien kopiert. Wenn ich fdupes -rddie Software starte, findet sie die beiden genauen Dateien und fragt, welche gelöscht werden soll.

Wenn Sie viele Dateien haben, können Sie die Option verwenden -1. fdupesdruckt alle Duplikate in einer einzigen Zeile. Sie können sie mit xargsund anderen Shell-Funktionen verarbeiten.

qbi
quelle
Kann die Ausgabe des Befehls fdupes -r an den Befehl mv weitergeleitet werden?
John McKean Pruitt
fdupes -rd ist nah an dem, was ich will, aber ich muss ungefähr 2000 Mal eine drücken, damit alle Dupes verschwunden sind.
John McKean Pruitt
1
Ich habe meiner obigen Antwort einen Absatz hinzugefügt.
Qbi
Das Problem hierbei ist, dass fdupeses nicht in Unterordner einzutauchen scheint. Zum Beispiel ~/Desktop/Dupes2/enthält es einen Ordner mit dem Titel Blood Sugar Sex Magik with the Dupes, aber ein einfacher fdupes -rBefehl gibt keine Liste zurück.
John McKean Pruitt
2

Ich habe eine etwas einfache Befehlskette gefunden. Vielen Dank an @Oli.

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

Dies diente dazu fdupes, -rdie Dupes rekursiv ( ) zu finden und das erste ( -f) wegzulassen . Bash liest diese Zeile für Zeile durch readund übergibt jede Zeile mv, um alle Duplikate in ein anderes Verzeichnis zu verschieben. Beachten Sie die Verwendung von Anführungszeichen in der whileSchleife, um Leerzeichen und andere zweifelhafte Interpunktionen zu fdupesbehandeln, die (auch mit -1/ --sameline) nicht verarbeitet werden .

John McKean Pruitt
quelle
@Oli, das geht nicht. Es werden keine Dateien von einem Ordner in den anderen verschoben
John McKean Pruitt
@Oli siehe meinen neuesten Kommentar zu "qbi" unten.
John McKean Pruitt
1

In den Antworten auf Manuell eingestellte Titelanzahl in Banshee? Es wird beschrieben, wie Sie zu der Datenbank gelangen, mit der Banshee alle Track-Informationen speichert.

Sobald Sie mit der Datenbank verbunden sind, fügen Sie in der Tabelle zum Ausführen von Abfragen ein

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

Klicken Sie in das SQL-Zeichenfolgenfeld auf "Abfrage ausführen". Dies zeigt Ihnen alle Titel mit demselben Titel, wobei Leerzeichen, Bindestriche und Punkte ignoriert werden. Wenn Sie andere Zeichen ignorieren möchten, fügen Sie sie der Abfrage im selben Muster hinzu. (IE add replace(vor dem ersten vorhandenen "Ersetzen" und nach dem letzten ")" in dieser Zeile hinzufügen , '[character you want removed]', '').

(Ich weiß nicht, wie viel Sie über SQL wissen - wenn Sie weitere Details benötigen, schreiben Sie einen Kommentar.)

Dadurch erhalten Sie eine Liste der Titel. Sie müssen das Löschen tatsächlich selbst durchführen.

Es gibt vielleicht einen besseren Weg, dies zu tun, aber wenn ja, weiß ich nichts darüber.

Wenn Sie eine große Liste von Dateien haben, die gelöscht werden sollen (entweder von meiner Methode oder von fdupesanderen, die bereits erwähnt wurden), legen Sie die Liste der Dateien, die Sie löschen möchten, in einem Textverzeichnis ab. Stellen Sie sicher, dass eine der folgenden Bedingungen erfüllt ist:

Option 1: Die Dateinamen enthalten den vollständigen Pfad. Zum Beispiel könnte die Datei enthalten:

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

Option 2: Die Dateinamen enthalten einen relativen Pfad, und die Datei mit der Liste der Dateinamen wird im übergeordneten Ordner gespeichert. Wenn Ihre Dateiliste beispielsweise in gespeichert wurde /home/doneill/music/, würde sie Folgendes enthalten:

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

Öffnen Sie in beiden Fällen ein Terminalfenster und wechseln Sie beispielsweise in den Ordner, der die Datei mit der Liste enthält cd /home/doneill/music/.

Eintippen:

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

(Ersetzen von filelist.txt durch den Namen der Datei durch die Liste). Dies sollte eine Liste aller Dateien ausspucken, die Sie löschen möchten. Nehmen Sie sich einen Moment Zeit, um die Liste zu überprüfen. Wenn es richtig ist, geben Sie Folgendes ein:

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

Dies sagt Ihrem Computer im Grunde: filelist.txtEntfernen Sie für jede Zeile in der Datei eine Datei mit dem angegebenen Namen.

David Oneill
quelle
Die Frage fragt nach doppelten Dateien, ohne Banshee zu erwähnen.
JPD
2
@jpd Es ist Banshee markiert ...
David Oneill
Sorry, habe die Tags komplett verpasst.
JPD
Ich kann nicht zur Banshee-Datenbank gelangen, da 11.10 nicht die Option hat, mit einem benutzerdefinierten Befehl zu öffnen, und die Problemumgehung darauf hindeutet, dass es nicht funktioniert hat. Ich wurde dort für eine Sekunde in das Kaninchenloch geworfen, bin aber zurück ohne Lösung.
John McKean Pruitt
1
@JohnMcKeanPruitt 1) ​​Führen Sie den SQLite-Datenbankbrowser aus (der Befehl lautet, sqlitebrowserwenn er bei der Installation nicht in Ihr Menü aufgenommen wird). 2) Datei -> Öffnen. 3) Geben /home/[user]/.config/banshee-1/Sie in die Adressleiste "Suchen in" ein (ersetzen Sie [Benutzer] durch Ihren Benutzernamen). 4) Doppelklicken Sie auf banshee.db.
David Oneill