1. 问题现象
客户发现进入Oracle的adump目录后,使用ls命令会一直卡住,没有输出。检查该目录的大小时,发现adump目录本身非常大,达到1G。
adump目录主要是用于存放数据库的审计信息,不断有新的小文件生成,因此如果没有定期清理数据的话,目录下会含有大量的文件,导致目录本身的结构变得很大,在查询目录下的文件信息时会非常缓慢。
2. 处理步骤
由于Oracle数据库未启动,于是计划使用rm -rf删除掉该目录及其下的所有文件后重建目录,但是系统报“bash: /usr/bin/rm: 参数列表过长”的错误。
使用“rm -r”不加-f参数以交互模式进入目录后可以看到目录下有大量名称中包含文件生成日期的aud文件,如下所示:
因为文件数量太多,使用命令“rm -f *.aud”来匹配删除文件也报“参数列表过长”的错误,最后使用find和xargs命令组合来清除掉目录下所有的aud文件:
find ./ -name "*.aud" | xargs rm -f
(注:如果文件名中包含空格,引号或反斜杠,则使用命令“find ./ -name “file*” -print0 | xargs -0 rm -f”)
注意:也可以直接使用find命令的-exec选项来完成批量文件的删除,但是经过对比发现效率低,删除速度很慢:
find ./ -name "*.aud" -exec rm {} \;
3.问题总结
当在目录下执行ls命令一直没有输出时,建议中止挂住的ls命令,然后使用“ls -ld”查看一下目录的大小,如果目录的大小比较大,一般是由于目录下含有大多文件导致,这时可以通过使用find命令和双引号包含通配符的方式来匹配批量删除文件。