由于工作原因,要管理一些图片服务器,其中有几台是作为图片存放的机器,每台机器配有10T的硬盘,最近硬盘告急,都只剩下几百个G,所以要删除一些图片。

目前服务器有一亿多个文件,删过这种大量的小碎文件的朋友一定知道使用rm -rf的下场,效果非常的差,基本上看不到什么效果。通过find命令带delete的效果也不太好,后来使用了rsync将空目录同步过去的方式,效果比较好,一天大概能清理出400G的空间。

为了保证并发的效果,写了脚本充当守护进程

#!/bin/sh #./delete.sh get_dir_path_cmd rsync_delete_cmd_process_total_count #./delete.sh "find /data1/sinawapcms/htdocs/images/iask/2012/08/*  -maxdepth 0"   20     rsync_path=rsync empty_dir=/tmp/empty/  get_rsync_process_num() {      echo  $(ps -ef | grep rsync | grep delete | wc -l); }  #$1 is rsync cmd , $2 is rsync total process num do_rsync_cmd() {     while test 1 = 1      do         if test  $(get_rsync_process_num) -lt $2          then             ($1 >/dev/null 2>&1 &);             break;         else             sleep 100;         fi      done       } if ! ( $rsync_path --version > /dev/null 2>&1 )  then     echo rsync path error;     exit 1;  fi  if ! ls -l $empty_dir  > /dev/null 2>&1 then     if ! mkdir -p $empty_dir >/dev/null 2>&1     then         echo Permission Denied, make sure you have permission to mkdir -p /tmp/empty ;             exit 3;     fi fi  if ! test $( ls -la $empty_dir | wc -l) = 3 then     echo  Directoty \"$empty_dir\" is not empty, empty directory? ;      printf "Enter (Y/N):";     read action < /dev/tty;      if test $action = "Y" || test $action = 'y'     then         if ! rm -rf ${empth_dir}/* >/dev/null 2>&1          then             echo Permission Denied, make sure you have permission to rm -rf $empty_dir;             exit 3;         fi      else         echo error, Directoty \"$empty_dir\" is not empty;         exit 2;     fi   fi   dir=$($1); #rsync --delete-before -a -H  /tmp/empty/   /data1/sinawapcms/htdocs/images/iask/2012/08/ff/  >/dev/null & for i in $dir do     sleep 5;     cmd="$rsync_path --delete-before -a -H $empty_dir ${i}/" ;     (do_rsync_cmd "$cmd" $2); done

调用方式:

./.sh    20  第一个参数用来获取我们要清空的目录 第二个参数限定并发数,防止服务器负载过高

本文出自 “邱凯的技术博客” 博客,请务必保留此出处http://xdebug.blog.51cto.com/1135229/1067241

通过rsync清除目录的shell脚本相关推荐

  1. linux shell 执行目录,bash shell脚本执行的几种方法

    bash shell 脚本执行的方法有多种,本文作一个总结,供大家学习参考. 假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一: ...

  2. shell 脚本返回上级目录_Bash技巧:简单快速 cd 到多层上级目录的 Shell 脚本

    在 Linux 中,当需要 cd 到多层的上级目录时,需要输入 cd ../../../ 等等多个 "../". 在输入比较快的时候,往往中间会多输入一个点号 '.'.或者少输入一 ...

  3. linux 脚本 切换目录,在shell脚本中切换目录ros生成

    用VB打造自己的SQL连接器 大家好.....好长时间没上网了...祝大家新年快乐....好了.工程开始 现建一个普通窗口..放上3个textBox控件. 一个是用来输入ip的txtaddres..还 ...

  4. 101个shell脚本

    转自:https://blog.51cto.com/zero01/2046242 101个shell脚本 本文用于记录学习和日常中使用过的shell脚本 [脚本1]打印形状 打印等腰三角形.直角三角形 ...

  5. shell脚本常用方法

    常用shell脚本 [脚本1]打印形状 打印等腰三角形.直角三角形.倒直角三角形.菱形 #!/bin/bash # 等腰三角形 read -p "Please input the lengt ...

  6. 100多个shell脚本的例子

    本文用于记录学习和日常中使用过的shell脚本 [脚本1]打印形状 打印等腰三角形.直角三角形.倒直角三角形.菱形 等腰三角形 #!/bin/bash read -p "Please inp ...

  7. 【转】干货分享-100个shell脚本

    本文用于记录学习和日常中使用过的shell脚本 [脚本1]打印形状 打印等腰三角形.直角三角形.倒直角三角形.菱形 #!/bin/bash # 等腰三角形 read -p "Please i ...

  8. Linux高级专题详解--shell编程大全(shell变量,if语句,case语句,for循环,while循环,函数调用,数组,正则表达式,shell脚本三剑客--grep,sed,awk家族)

    shell编程 初始shell 程序 语言 编程 ---------------------------------- 语言 自然语言:汉语.英语 计算机语言:c语言.c++.(java php py ...

  9. shell 脚本(一)

    目录 1 shell 脚本语言的基本用法 1 shell 脚本的用途 2 shell 脚本基本结构 3 shell脚本创建过程 4 shell 脚本注释规范 5 第一个 shell 脚本 6 shel ...

最新文章

  1. 阿里一面,给了几条SQL,问需要执行几次树搜索操作?
  2. SAP WM 二步法确认TO单据
  3. 迅捷cad_迅捷属性
  4. pku2192---Zipper(动态规划题,随机组合两个字符串)
  5. Linux下高效实用的grep命令
  6. 使用SAX读取XML文件
  7. wps中加入代码块样式_样式图块的概述以及为什么要在设计过程中开始实施它们...
  8. DA转换器原理及应用(报告)
  9. python取下标_python获取下标
  10. 利用代码快速批量取消微博的关注
  11. JAVA计算机毕业设计中华二十四节气文化传承宣展平台Mybatis+源码+数据库+lw文档+系统+调试部署
  12. 各种压缩格式介绍!(摘录2)
  13. EPICS应用程序开发2 -- EPICS概要
  14. C++: 生成给定范围内的所有多维索引。 模拟任意数量的嵌套循环的行为(附完整源码)
  15. NETCore2.2/3.0+使用带有权限验证的Swagger
  16. 程序员“996”,真的能带来高产出吗?
  17. 计算机在通风网络中的应用,计算机在矿井通风中应用.doc
  18. 闲的折腾——自己动手更换油雾分离阀/废气阀
  19. 五杆机构正运动学公式、逆运动学公式MATLAB代码
  20. 代码随想录训练营day31

热门文章

  1. python中dict和list排序
  2. UA MATH564 概率论 依概率收敛的一个例题
  3. DOS命令温习(图解)
  4. layui 动态添加 表格数据
  5. SQL注入语法类型——报错注入
  6. iOS进阶_Socket(Socket简介代码演练)
  7. hihoCoder week17 最近公共祖先·三 lca st表
  8. 09-spring学习-资源访问接口
  9. linux iptables扩展,脚本防火墙
  10. (转)xshell无法在vim中复制黏贴