删除目录下文件大小相同的文件

简介:
    朋友用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 {} \;

本文转自 qwjhq 51CTO博客,原文链接:http://blog.51cto.com/bingdian/183532
相关文章
|
8月前
重定向,创建文件,删除文件,创建目录,删除目录,cp命令
重定向操作符可以将命令输入和输出数据流从默认设备重定向到其他位置。重定向操作符本身不是命令,而是命令中附加的可改变命令的输入和输出对象的特殊符号。
72 0
|
4月前
|
Linux Windows
文件属性和路径
文件属性和路径
|
5月前
ls查看文件大小
ls查看文件大小
|
8月前
读取指定文件夹下面的所有文件(含子目录)
读取指定文件夹下面的所有文件(含子目录)
30 0
|
8月前
|
Linux Shell
删除文件
删除文件
64 2
|
10月前
day31-文件属性(2022.3.2)
day31-文件属性(2022.3.2)
39 0
查找文件夹内所有文件
查找文件夹内所有文件
50 0
C#编程-22:判断文件是否存在并创建文件(夹)
C#编程-22:判断文件是否存在并创建文件(夹)
|
安全 Windows
[20180319]windows批处理文件大小比较.txt
[20180319]windows批处理文件大小比较.txt --//我使用eDiary写日志,有时候为了安全期间,我在U盘保留一份备份. --//需要同步,但是eDiary有一个"问题"就是如果打开日记本,没有任何操作,都会修改文件的时间戳.
1173 0