如何查找和删除重复的音乐曲目?

Joh*_*itt 8 music banshee duplicate-files 11.10

我的问题是由于某种原因我有一些音乐曲目的重复。但是,它们的名称并不相同。例如:

音乐/Prefuse 73/一字灭火器/07。德奇贝.mp3

&

音乐/Prefuse 73/One Word Extinguisher/07 - Detchibe.mp3

请注意,它们是重复的歌曲,但 07* . * & 07 -欺骗根据文件名搜索的重复文件查找器。

qbi*_*qbi 2

您可以使用像问题\xc2\xbbHow to find and delete重复文件\xc2\xabfdupes建议的答案一样的方法。让我举个例子吧:

\n\n
mkdir -p "Music/Prefuse 73/One Word Extinguisher/"\ndd if=/dev/urandom of=Music/Prefuse\\ 73/One\\ Word\\ Extinguisher/07.Detchibe.mp3 bs=1023 count=2048\n  2048+0 records in\n  2048+0 records out\n  2095104 bytes (2.1 MB) copied, 0.379806 s, 5.5 MB/s\ncp Music/Prefuse\\ 73/One\\ Word\\ Extinguisher/07.Detchibe.mp3 Music/Prefuse\\ 73/One\\ Word\\ Extinguisher/"07 - Detchibe.mp3"\nfdupes -rd .\n  [1] ./Music/Prefuse 73/One Word Extinguisher/07.Detchibe.mp3\n  [2] ./Music/Prefuse 73/One Word Extinguisher/07 - Detchibe.mp3\n\n  Set 1 of 1, preserve files [1 - 2, all]:\n
Run Code Online (Sandbox Code Playgroud)\n\n

首先,我像您的示例一样创建了目录。我从随机数据创建了一个文件并将其内容复制到另一个文件。当我运行fdupes -rd该软件时,它会找到两个确切的文件,并询问要删除哪一个。

\n\n

如果您有很多文件,可以使用选项-1fdupes将在一行上打印所有重复项。您可以使用xargs其他 shell 功能来处理它们。

\n


Dav*_*ill 1

在 Banshee 中手动设置曲目收听计数的答案中,它描述了如何获取 Banshee 用于保存所有曲目信息的数据库。

连接到数据库后,在执行查询表上粘贴

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

进入 SQL 字符串框,然后单击“执行查询”。这将向您显示具有相同标题的所有曲目,忽略空格、破折号和句点。如果您想忽略其他字符,请以相同的模式将它们添加到查询中。(IEreplace(在该行的第一个现有“替换”之前添加,在最后一个“)”之后添加, '[character you want removed]', '').

(我不知道您对 sql 了解多少 - 如果您需要更多详细信息,请发表评论。)

这将为您提供标题列表。您必须亲自执行删除操作。

可能有更好的方法来做到这一点,但如果有的话,我不知道。

一旦您有了要删除的大量文件列表(无论是通过我的方法还是通过fdupes其他人提到的方法),请将要删除的文件列表放入文本目录中。确保以下其中一项为真:

选项#1:文件名包含完整路径。例如,该文件可能包含:

/home/doneill/music/weird_al/duped_file.mp3
/home/doneill/music/weird_al/another_dupe.mp3
/home/doneill/music/bach/baroque_dupe.mp3
Run Code Online (Sandbox Code Playgroud)

选项#2:文件名包含相对路径,并且包含文件名列表的文件保存在父文件夹中。例如,如果您的文件列表保存在 中/home/doneill/music/,它将包含:

weird_al/duped_file.mp3
weird_al/another_dupe.mp3
bach/baroque_dupe.mp3
Run Code Online (Sandbox Code Playgroud)

无论哪种情况,请打开终端窗口,然后更改为包含带有列表的文件的文件夹 cd /home/doneill/music/

输入:

for a in `cat filelist.txt`; do echo $a; done
Run Code Online (Sandbox Code Playgroud)

(将 filelist.txt 替换为包含列表的文件名)。这应该会显示出您要删除的所有文件的列表。花点时间仔细检查一下列表。如果正确,请输入:

for a in `cat filelist.txt`; do rm $a; done
Run Code Online (Sandbox Code Playgroud)

这基本上告诉您的计算机:对于文件中的每一行filelist.txt,删除具有列出名称的文件。

  • @jpd 它被标记为女妖...... (2认同)