1个回答
展开全部
此问题其实可以用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
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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询