如何查找和删除重复的音乐曲目?
我的问题是,由于某种原因,我有一些音乐曲目的重复。 但是它们没有相同的名称。 例如:
音乐/预付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
,软件找到两个确切的文件并询问要删除的文件。
如果您有大量文件,则可以使用选项-1
。 fdupes
将在一行上打印所有重复项。 您可以使用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
中的每一行,删除列出名称的文件。