使用bash循环,我要删除文件夹中三种文件名之一
1)L4.mp3
2)L4与Music.mp3
3)L4 noIntro with Music.mp3
这三种类型的文件很多,唯一改变的是L后面的数字
我想: 保留任何名称如 1 的文件(原始文件)
保留任何名称如 3 (已添加音乐并删除了简介)的文件
但删除所有名称类似于 2 的文件(添加了音乐但不介绍音乐)
最好的方法是什么?
我最初的想法(始终无法编译)是:
for file in *.mp3; do
name=${file%%[.]*};
if name != "$*trimmed wMusic.mp3";
then
rm file;
fi
done
但输出为:
-bash: name: command not found
-bash: name: command not found
-bash: name: command not found
-bash: name: command not found
答案 0 :(得分:2)
不确定为什么需要循环,但是这里有一些建议:
ls *.mp3 | grep '(1)' | xargs -d"\n" rm
这将获取所有带有表达式(1)的.mp3文件,例如abc(1).mp3等
如果您想在方法上获得更广泛的影响或更具动态性,我建议在grep中使用regex:
ls *.mp3 | grep -P "regex-here" | xargs -d"\n" rm
如果您要删除其他几种类型的文件,例如mp4等在同一命令中,然后使用:
ls *.{mp3,mp4,mpeg} | grep -P "regex-here" | xargs -d"\n" rm
您还可以使用正则表达式并借助查找删除:
find -iregex 'regex-here' -delete