当一个目录中的内容过多时,文件的清理将成为一个麻烦的事情,比较常见的就是 Oracle 的 audit 目录 和 trace 目录。

这儿记录两种方法,各有利弊,可根据实际情况选择。

方法一:文件逐个判断,然后删除

进入要处理的目录,先使用类似命令生成文件列表文件:ls -t | grep aud > cfop.cy

将如下内容写到一个脚本,直接 sh script_name.sh 即可

while read filename; do
    checkuse=`fuser -u $filename 2>&1 | awk -F: '{print $2}' | grep '(' | wc -l | awk '{print $1}'`
        if [ $checkuse -ne 0 ]; then            
            echo "$filename is using..."
        else
            echo "$filename is not using...removed"
            rm $filename
        fi
done < cfop.cy

方法二:文件批量快速删除

思想:将正在使用的文件找出来,使用 find 命令查找目录下的文件并删除(排除在用的文件)

运行脚本的方法:只需要修改目录和 find 的文件名匹配

auditdir='/data/app/18.3.0/grid/rdbms/audit'

# using audit file
lsof | grep "${auditdir}/" | awk '{print $NF}' | grep -v deleted | awk -F/ '{print $NF}' | sort | uniq > /tmp/auditfile.using.tmp

# delete audit file
export filestring=$(sed ':a ; N;s/\n/ -a ! -name / ; t a ; ' /tmp/auditfile.using.tmp)

if [ -z "${filestring}" ];then

    cd ${auditdir}
    find ./ -type f -a -name "*.trc" |  xargs rm -f
    find ./ -type f -a -name "*.trm" |  xargs rm -f
    find ./ -type f -a -name "*.aud" |  xargs rm -f

else
    cd ${auditdir}
    find ./ -type f -a -name "*.trc" -a ! -name ${filestring} |  xargs rm -f
    find ./ -type f -a -name "*.trm" -a ! -name ${filestring} |  xargs rm -f
    find ./ -type f -a -name "*.aud" -a ! -name ${filestring} |  xargs rm -f
fi
-- By 许望(RHCA、OCM、VCP)
最后修改:2020 年 01 月 02 日 08 : 38 PM
如果觉得我的文章对你有用,请随意赞赏