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

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

音乐/预付73 /单字灭火器/ 07。 Detchibe.mp3

音乐/ Prefuse 73 /一字灭火器/ 07 – Detchibe.mp3

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

您可以使用fdupes如问题的答案»如何查找和删除重复的文件«建议。 让我举个例子:

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

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

如果您有大量文件,则可以使用选项-1fdupes将在一行上打印所有重复项。 您可以使用xargs和其他shellfunction处理它们。

我找到了一个简单的命令链。 非常感谢@Oli。

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

这使用fdupes递归( -r )找到fdupes ,省略第一个( -f )。 Bash通过read amd指针逐行read每行到mv以将所有重复项移动到另一个目录。 注意在while循环中使用引号来处理fdupes无法处理的空格和其他狡猾的标点符号(即使使用-1 / --sameline )。

在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; 

进入SQL字符串框,然后单击“执行查询”。 这将显示您拥有相同标题的所有曲目,忽略空格,短划线和句点。 如果您要忽略其他字符,请以相同的模式将它们添加到查询中。 (IE添加replace(在第一个现有的“替换”之前和最后一个“)”之后,添加, '[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 

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

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

在任何一种情况下,打开终端窗口,然后更改为包含列表cd /home/doneill/music/的文件的文件夹。

输入:

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

(将filelist.txt替换为带有列表的文件名)。 这应该吐出您要删除的所有文件的列表。 花一点时间仔细检查清单。 如果是的,请键入:

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

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