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


8

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

音乐/拒绝73 /一个文字灭火器/ 07。Detchibe.mp3

音乐/拒绝73 /一个文字灭火器/ 07-Detchibe.mp3

注意它们是重复的歌曲,但07 * * 07 -被欺骗,搜索基于文件名重复文件查找程序。


2
您在这里尝试了任何建议吗?
2012年

fdupes可以挑出两个重复项之一并将其删除吗?否则,fdupes -r命令仅生成一个列表,该列表无法将我带到任何地方。
John McKean Pruitt'4

这回答了你的问题了吗?如何找到重复的歌曲?
卡雷尔

Answers:


2

您可以使用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和其他外壳功能对其进行处理。


fdupes -r命令的输出可以通过管道传递到mv命令吗?
约翰·麦基恩·普鲁伊特

fdupes -rd接近我想要的,但我必须按一次约2000次才能使所有的重复对象消失。
John McKean Pruitt '04年

1
我在上面的答案中添加了一段。
qbi 2012年

这里的问题是fdupes似乎没有深入子文件夹中。例如,其中~/Desktop/Dupes2/有一个名为“ Dupes Sugar Sugar Sex Magik”的文件夹,但是一个简单的fdupes -r命令不会返回任何列表。
约翰·麦基恩·普鲁特

2

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

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

这通常fdupes用于递归(-r)来查找重复对象,而省略第一个(-f)。Bash通过readamd 逐行读取此行,mv以将所有重复项移至另一个目录。注意在while循环中使用引号来处理空格和其他fdupes无法处理的标点符号(即使使用-1/ --sameline)。


@Oli,这并没有解决问题。没有文件从一个文件夹移动到另一个文件夹
John McKean Pruitt '04

@Oli在下面看到我对“ qbi”的最新评论。
约翰·麦基恩·普鲁特

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;

放入SQL字符串框中,然后单击“执行查询”。这将显示具有相同标题的所有曲目,而忽略空格,破折号和句点。如果还有其他字符要忽略,则以相同的方式将它们添加到查询中。(replace(即,在该行的第一个现有“替换”之前和最后一个“)之后添加IE ”,添加, '[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,删除具有列出名称的文件。


该问题询问重复文件,没有提及女妖。
2012年

2
@jpd标记为女妖...
大卫·

抱歉,完全错过了标签。
2012年

我无法进入女妖数据库,因为11.10无法选择使用自定义打开 命令并且变通方法建议那里不起作用-我在那里丢下了兔子洞,但是我又回来了没有解决方案。
John McKean Pruitt '04年

1
@JohnMcKeanPruitt 1)运行sqlite数据库浏览器(该命令是sqlitebrowser安装时未放入菜单的命令)。2)文件->打开。3)/home/[user]/.config/banshee-1/在“查找”地址栏中输入(用您的用户名替换[用户])。4)双击banshee.db
David Oneill '04
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.