• 一道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

  • 相关阅读:
    转:【实用教程】阿里云服务器的配置和使用
    C# 定制错误页面
    C# Session进程外存储
    NOIP200101数的计算
    周末舞会
    queue 队列
    信息学作文
    求三个数的平均数
    Hello world
    Django-Form组件-forms.Form
  • 原文地址:https://www.cnblogs.com/wenxingxu/p/9455874.html
Copyright © 2020-2023  润新知