Chinaunix首页 | 论坛 | 博客
  • 博客访问: 227725
  • 博文数量: 24
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 1007
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-19 12:10
个人简介

人若不能在内心找到安宁,在哪里也无济于事。

文章分类

全部博文(24)

文章存档

2013年(24)

我的朋友

分类: 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

阅读(2366) | 评论(0) | 转发(0) |
0

上一篇:awk实现统计并去重

下一篇:rsync同步数据

给主人留下些什么吧!~~