写一个Shell脚本

用来删除指定目录下(包括各级子目录)所有长度为0的文件... 用来删除指定目录下(包括各级子目录)所有长度为0的文件 展开
 我来答
volate13
2011-05-27 · 超过10用户采纳过TA的回答
知道答主
回答量:26
采纳率:0%
帮助的人:33.7万
展开全部
  此问题其实可以用find命令解决
  find dir -t f -empty |xargs rm -f,这样便达到要求了。若想自已用shell实现,我这里有一个,仅做参考。(主要缺点在于,用了递归,没有测试最大能够处理到多少级子目录)
  #!/bin/bash -
  #by volate
  set -u

  Pro=$0
  Dir=$1

  #此函数标明此程序的用法,或者因错误退出的标志及退出码
  usage(){
  local pro=$1
  local ErrStr=$2
  local ExitDig=$3
  echo "Usage: $pro {Dir}"
  echo "Error: $ErrStr"
  exit $ExitDig
  }

  #此函数找出目标目录下的所有文件,并递归到子目录
  findFile(){
  local dir=$1
  cd $dir || usage $Pro "Can't chdir $dir" 2
  for f in * ;do
  #递归到子目录
  test -d $f && findFile $f
  #若是文件,则交给下个函数处理
  test -f $f && delEmptyFile $f
  done
  }

  #此函数删除大小为0的文件
  delEmptyFile(){
  local file=$1
  #得到文件大小
  local fileSize=`ls -l $file | awk '{print $5}'`
  #判断大小是否为0
  if [ "X$fileSize" = "X0" ]; then
  echo "`pwd`/$file is empty, delete..."
  rm -f $file || usage $Pro "can't delete $file" 3
  fi
  }

  Pro=$0
  if [ $# != 1 ];then
  usage $Pro "argv error" 1
  fi

  Dir=$1
  workDir=`pwd`
  findFile $Dir
  cd $workDir
  exit 0
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式