一道shell笔试题 把指定目录中的文件按大小进行分拣

http://blog.chinaunix.net/uid-23302288-id-3781684.html   原文连接

完成一个Shell,把指定目录中的文件按大小进行分拣,默认以100K为界线,分拣到指定的另外两个目录中。
程序运行需输入参数:<源目录><大文件目录><小文件目录>
程序还需提供可选参数两个,-s指定分拣界线,如200设置界线为200k;-z 对分拣出来的文件进行压缩。


#!/bin/bash
functionUsage()
{
     echo "Usage: $0 <s_dir l_dir="" s_dir="" [-s]="" [-z]="">"
     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

原文地址:https://www.cnblogs.com/wenxingxu/p/9455874.html