分类: LINUX
2013-06-30 18:32:18
完成一个Shell,把指定目录中的文件按大小进行分拣,默认以100K为界线,分拣到指定的另外两个目录中。
程序运行需输入参数:<源目录><大文件目录><小文件目录>
程序还需提供可选参数两个,-s指定分拣界线,如200设置界线为200k;-z 对分拣出来的文件进行压缩。
#!/bin/bash
functionUsage()
{
echo "Usage: $0
exit 1
}
if [ ! -d $1 ];then functionUsage;
elif [ ! -d $2 ];then functionUsage;
elif [ ! -d $3 ];then functionUsage;
fi
oneMove()
{
for x in `ls -l $1|awk 'NR!=1 && !/^d/{if (int($5/1024) > 100) print $NF}'`;do mv $x $2;done
for y in `ls -l $1|awk 'NR!=1 && !/^d/{print $NF}'`;do mv $y $3;done
}
twoMove()
{
read -p "please input size: " _num
for x in `ls -l $1|awk -v _size="$_num" 'NR!=1 && !/^d/{if (int($5/1024) > _size) print $NF}'`;do mv $x $2;done
for y in `ls -l $1|awk 'NR!=1 && !/^d/{print $NF}'`;do mv $y $3;done
}
fileTar()
{
cd $2 && tar zcvf large.tar.gz ./*
cd $3 && tar zcvf small.tar.gz ./*
}
case "$#" in
3) oneMove;;
4) if [ "$4" = "-s" ];then twoMove; else oneMove; fileTar; fi;;
5) twoMove; fileTar;;
*) functionUsage;;
esac