我想删除由iTunes创建的重复文件,这些文件都以“1.mp3”结尾。我已经接近匹配,但我不知道如何匹配空间。有人可以写一个命令递归地从当前目录中删除这些文件吗?在bash中匹配空格
回答
你想通过你的iTunes音乐收藏,并删除Nickelback的如果我不在乎1.MP3但是,只有当Nickelback乐队原MP3,如果我care.mp3,依然存在。对?
嘿,你的音乐品味是由你...
这应该做的伎俩:
find -name "* 1.mp3" | while read file
do
if [ -e "${file% 1.mp3}.mp3" ]
then
rm $file
fi
done
我发现所有(在空间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
并验证这些文件是否有原始文件)。
find . -name "* 1.mp3" -exec rm {} \;
听起来像find
的工作!
find . -type f -name '* 1.mp3' -print0 | xargs -0 rm
其他解决方案类似,但会检查文件没有的“1”后缀真的存在,因此它不会不期而遇删除歌曲后缀名为“1”。
shopt -s globstar
for file in **/*' '1.mp3 ; do
if [[ -f "${file% 1.mp3}.mp3" ]] ; then
rm "$file"
fi
done
当'file.mp3'实际上是'file 1.mp3'的符号链接时,这里就有一个漏洞。此外,你可以做一个校验和,看看这些文件是否真的是一样的...哎呀,你可以做一个模糊检查的情况下,编码/标签是不同的。现在得到相当偏离 – sehe
更快:
find . -name "* 1.mp3" -exec rm {} +
find . -type f -name '* 1.mp3' -print0 | xargs -0 rm
哪个kbyrd提到是根据我的最佳方式,因为-print0和-0组合,因为。
-print0 True;在标准输出上打印完整文件名,然后用空字符(而不是 -print使用的换行符)跟在 之后。这允许包含换行符或其他类型的空格的文件名由处理查找输出的pro- 克正确解释。该选项对应于xargs的-0选项 。
- 1. 在Perl中用空格或无空格匹配字符串
- 2. 仅匹配空格内{}
- 3. 匹配值根据在bash
- 4. 匹配不在行尾的空格
- 5. 仅匹配空格的通配符
- 6. Bash:模式匹配
- 7. Bash模式匹配
- 8. Bash匹配数字
- 9. 你在bash中如何匹配^ [\ s] *?
- 10. bash脚本中的空格
- 11. 不匹配数字或空格时匹配的词+数字
- 12. 避免重复匹配,如果匹配空格前面
- 13. 如何在javascript中匹配alt + 0160(无中断空格)?
- 14. PHP preg_replace不匹配多个空格
- 15. Reg Exp:仅匹配数字和空格
- 16. SED空格/换行符匹配 - Linux
- 17. java的模式匹配insenitive为空格
- 18. awk匹配模式无空格
- 19. Python:匹配一个单词(用空格)
- 20. Antlr3匹配没有空格的标记
- 21. 正则表达式仅匹配空格
- 22. VBA索引/匹配空白单元格
- 23. 匹配以空格开头的多行
- 24. 用preg_replace匹配重复的空格
- 25. fscanf()/ sscanf() - 匹配可变长度空格?
- 26. 匹配图像链接包含空格
- 27. \ s +不匹配所有空格?
- 28. 正则表达式 - 匹配空格
- 29. 如何使xpath匹配空格?
- 30. 让两个字符串匹配空格
我很抱歉这么晚回复,它完美的工作,并感谢伟大的解释。 – Chironex