我的问题是由于某种原因,我复制了一些音乐曲目。但是,它们的名称不同。例如:
音乐/拒绝73 /一个文字灭火器/ 07。Detchibe.mp3
和
音乐/拒绝73 /一个文字灭火器/ 07-Detchibe.mp3
注意它们是重复的歌曲,但07 * 。* 07 -被欺骗,搜索基于文件名重复文件查找程序。
我的问题是由于某种原因,我复制了一些音乐曲目。但是,它们的名称不同。例如:
音乐/拒绝73 /一个文字灭火器/ 07。Detchibe.mp3
和
音乐/拒绝73 /一个文字灭火器/ 07-Detchibe.mp3
注意它们是重复的歌曲,但07 * 。* 07 -被欺骗,搜索基于文件名重复文件查找程序。
Answers:
您可以使用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
和其他外壳功能对其进行处理。
fdupes
似乎没有深入子文件夹中。例如,其中~/Desktop/Dupes2/
有一个名为“ Dupes Sugar Sugar Sex Magik”的文件夹,但是一个简单的fdupes -r
命令不会返回任何列表。
我发现了一个简单的命令链。非常感谢@Oli。
fdupes -rf --quiet ~/Desktop/Dupes2/ | while read i; do mv "$i" ~/Desktop/Dupes/ ; done
这通常fdupes
用于递归(-r
)来查找重复对象,而省略第一个(-f
)。Bash通过read
amd 逐行读取此行,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字符串框中,然后单击“执行查询”。这将显示具有相同标题的所有曲目,而忽略空格,破折号和句点。如果还有其他字符要忽略,则以相同的方式将它们添加到查询中。(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
,删除具有列出名称的文件。
sqlitebrowser
安装时未放入菜单的命令)。2)文件->打开。3)/home/[user]/.config/banshee-1/
在“查找”地址栏中输入(用您的用户名替换[用户])。4)双击banshee.db
。