朋友用MACOS系统由于系统里的播放器在播放音乐的时候,由于播放器的原因在系统里播放网站
的一首歌时会产生多个文件存放在系统里,开始的思路是想通过把系统里的所有mp3及wma文件放在同一个
目录一个然后再在这个目录里判断文件大小,如果文件大小相同则删除多余的文件,但最后发觉这根本就
达到删除相同歌曲的目的,但这个脚本我觉得有点意思,于是想把它保存下来,供大家参考。最终达到目
的是使用find命令实现。即最后一条命令删除目录下以|数字和.mp3|结尾的文件,因为发觉同一首的在同
一个目录下会生成这样的文件。
#!/bin/bash
echo "please put the source  music dirctory "
read source #读取源目录,我这里是全盘搜索
echo "please put the destination dirctory"
read destination#读取目的目录,这个目录必须为空,即自己在系统中新建一个目录,不然可能会删除
到了你不想要删除的文件
find $source -name "*.[Mm][Pp]3" -type f -exec mv  {} $destination \;
find $source -name "*.[Ww][Mm][Aa]" -type f -exec mv  {} $destination \;
cd $destination
for  i in `ls`#这里是外循环
do
namei=(`du $i`)#这里使用du选项,记得如果使用了du -h选项的话,会四舍五入,会出现不同结果
szi=${namei[0]}
nfi=${namei[1]}
for  j in `ls`#这里是内循环
do
namej=(`du $j`)
szj=${namej[0]}
nfj=${namej[1]}
if [  ! -f "$nfi" ]#这个判断是为了防止for循环在删除了一个文件后还进行匹配
then
:
elif [ "$nfi" != "$nfj" -a "$szi" -eq "$szj" ]
then
echo "$nfj" #打印出被删除的文件
rm -rf $nfj
#sleep 1这个用于调试脚本使用因为这个我们可以set -x更清楚直观的观察到执行过程
fi
done
done 2>/dev/null #把标准错误重定向到/dev/null不显示出来,因为如果在循环中我们删除了后面文件
当i循环到该文件时,该文件已经被删除了,系统会报错,但这些是已知错误没有必要让它显示出来

删除目录下以数字.mp3结尾的文件
find /mp3/ -name "*[0-9].mp3" -exec -rf {} \;
      要善于观察,呵呵,不过这事也没算白忙乎,至少又熟悉了一下for循环