我想删除由itunes制作的重复文件,这些文件都以“1.mp3”结尾。我已接近匹配,但我不知道如何匹配空间。有人可以写一个命令来递归删除当前目录中的那些文件吗?
答案 0 :(得分:3)
你想浏览你的iTunes收藏并删除Nickelback的如果我关心1.mp3 但是,只有当Nickelback原版MP3,如果我关心.mp3 时,仍然存在。正确?
嘿,你的音乐品味取决于你......这应该可以解决问题:
find -name "* 1.mp3" | while read file
do
if [ -e "${file% 1.mp3}.mp3" ]
then
rm $file
fi
done
我找到所有重复项(以space-1.mp3结尾的歌曲)并将它们传递给while
语句。
${word%filter}
语法表示取$word
并从右侧删除glob表达式filter
。因此,${file% 1.mp3}
是没有1.mp3
后缀的文件的名称。现在,If I care 1.mp3
变为If I care
。因此,我们需要重新添加.mp3
后缀。因此${file% 1.mp3}.mp3
。这为我们提供了文件的原始名称。
现在,我们使用-e
测试来检查该文件是否存在。如果是,我们可以删除歌曲的space-1.mp3版本。
我运行了一些基本测试,但我建议您先尝试一下(可能先将rm $file
更改为echo Removing file $file
并验证这些文件是否有原始版本。
答案 1 :(得分:2)
听起来像find
的工作!
find . -type f -name '* 1.mp3' -print0 | xargs -0 rm
答案 2 :(得分:1)
与其他解决方案类似,但检查文件没有“1”后缀确实存在,因此不会意外删除名称以“1”结尾的歌曲。
shopt -s globstar
for file in **/*' '1.mp3 ; do
if [[ -f "${file% 1.mp3}.mp3" ]] ; then
rm "$file"
fi
done
答案 3 :(得分:0)
find . -name "* 1.mp3" -exec rm {} \;
答案 4 :(得分:0)
更快:
find . -name "* 1.mp3" -exec rm {} +
答案 5 :(得分:0)
find . -type f -name '* 1.mp3' -print0 | xargs -0 rm
由于-print0和-0的组合,kbyrd提到的是最好的方法,因为。
-print0 真正;在标准输出上打印完整的文件名,然后 用空字符(而不是换行符) - 印刷用途)。这允许包含换行符的文件名或 其他类型的空白区域可由Pro-正确解释 处理查找输出的克数。此选项对应于 xargs的-0选项。