¿Cómo encuentro y elimino pistas de música duplicadas?

8

Mi problema es que por alguna razón tengo duplicados de algunas pistas de música. Sin embargo, no tienen nombres idénticos. Por ejemplo:

Música / Prefuse 73 / Extintor de una palabra / 07. Detchibe.mp3

Y

Música / Prefuse 73 / Extintor de una palabra / 07 - Detchibe.mp3

Tenga en cuenta que son canciones duplicadas pero el 07 * . * & the 07 - está engañando a los buscadores de archivos duplicados que buscan en función de los nombres de los archivos.

John McKean Pruitt
fuente
2
¿Has probado alguna de las sugerencias aquí ?
jpd
¿Pueden fdupes seleccionar uno de los dos duplicados y eliminarlo? De lo contrario, el comando fdupes -r solo genera una lista que no me lleva a ninguna parte.
John McKean Pruitt
¿Responde esto a tu pregunta? ¿Cómo puedo encontrar canciones duplicadas?
karel

Respuestas:

2

Puede usar fdupescomo la respuesta a la pregunta »Cómo encontrar y eliminar archivos duplicados« sugerido. Déjame dar un ejemplo:

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

Primero creé el directorio como en tu ejemplo. Luego hice un archivo a partir de datos aleatorios y copié su contenido a otros archivos. Cuando ejecuto fdupes -rdel software encuentra los dos archivos exactos y pregunta cuál eliminar.

Si tiene muchos archivos, puede usar la opción -1. fdupesimprimirá todos los duplicados en una sola línea. Puede procesarlos con xargsy otras funciones de shell.

qbi
fuente
¿Se puede canalizar la salida del comando fdupes -r al comando mv?
John McKean Pruitt
fdupes -rd está cerca de lo que quiero, pero tendré que presionar uno unas 2000 veces para que todos los tontos desaparezcan.
John McKean Pruitt
1
Agregué un párrafo a mi respuesta anterior.
qbi
El problema aquí es que fdupesno parece sumergirse en subcarpetas. Por ejemplo, ~/Desktop/Dupes2/tiene una carpeta titulada Blood Sugar Sex Magik with the Dupes, pero un simple fdupes -rcomando no devuelve ninguna lista.
John McKean Pruitt
2

Encontré una cadena de comandos algo simple. Muchas gracias a @Oli.

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

Esto solía fdupesrecursivamente ( -r) encontrar los engañados, omitiendo el primero ( -f). Bash lee esta línea por línea a través de readamd maneja cada línea mvpara mover todos los duplicados a otro directorio. Tenga en cuenta el uso de comillas en el whilebucle para manejar espacios y otros signos de puntuación dudosos que fdupesno manejarán (incluso con -1/ --sameline).

John McKean Pruitt
fuente
@Oli, esto no está haciendo el truco. No se están moviendo archivos de una carpeta a otra
John McKean Pruitt
@Oli mira mi último comentario a "qbi" a continuación.
John McKean Pruitt
1

En las respuestas a la cuenta manual de escucha de pistas en Banshee? , describe cómo acceder a la base de datos que utiliza banshee para guardar toda la información de la pista.

Una vez que esté conectado a la base de datos, en la tabla de consulta de ejecución, pegue

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

en el cuadro de cadena SQL, luego haga clic en 'ejecutar consulta'. Esto le mostrará todas las pistas que tiene con el mismo título ignorando espacios, guiones y puntos. Si hay otros caracteres que desea ignorar, agréguelos a la consulta en el mismo patrón. (Es decir, agregue replace(antes del primer "reemplazar" existente y después del último ")" en esa línea, agregue , '[character you want removed]', '').

(No sé cuánto sabe sobre sql; si necesita más detalles, publique un comentario).

Esto te dará una lista de títulos. Tendrá que hacer la eliminación usted mismo.

Puede haber una mejor manera de hacer esto, pero si la hay, no lo sé.

Una vez que tenga una gran lista de archivos para eliminar (ya sea de mi método o de los fdupesque otros han mencionado), coloque la lista de archivos que desea eliminar en un directorio de texto. Asegúrese de que uno de los siguientes es verdadero:

Opción n. ° 1: los nombres de archivo contienen la ruta completa. Por ejemplo, el archivo puede contener:

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

Opción n. ° 2: los nombres de archivo contienen una ruta relativa, y el archivo con la lista de nombres de archivo se guarda en la carpeta principal. Por ejemplo, si su lista de archivos se guardó /home/doneill/music/, contendría:

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

En cualquier caso, abra una ventana de terminal y cambie a la carpeta que contiene el archivo con la lista, cd /home/doneill/music/por ejemplo.

Escribir:

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

(Reemplazando filelist.txt con el nombre del archivo con la lista). Esto debería escupir una lista de todos los archivos que desea eliminar. Tómese un momento para revisar la lista. Si es correcto, escriba:

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

Esto básicamente le dice a su computadora: para cada línea en el archivo filelist.txt, elimine un archivo con el nombre en la lista.

David Oneill
fuente
La pregunta se refiere a archivos duplicados, sin mencionar a Banshee.
jpd
2
@jpd Está etiquetado banshee ...
David Oneill
Lo siento, perdí por completo las etiquetas.
jpd
No puedo acceder a la base de datos de banshee porque 11.10 no tiene la opción de abrir con un comando personalizado y la solución sugería que no funcionaba: me arrojaron por la madriguera del conejo por un segundo, pero volví Sin solución.
John McKean Pruitt
1
@JohnMcKeanPruitt 1) ​​Ejecute el navegador de base de datos sqlite (el comando es sqlitebrowsersi no está en su menú cuando lo instala). 2) Archivo -> Abrir. 3) Escriba /home/[user]/.config/banshee-1/en la barra de direcciones 'Buscar en' (reemplace [usuario] con su nombre de usuario). 4) Haz doble clic en banshee.db.
David Oneill