使用find -ctime -1配合clamscan未筛选新文件问题求助
问题原因分析与修复方案
1. clamscan的-r参数是核心问题
你给clamscan加了-r参数,这个参数的作用是递归扫描指定目录下的所有内容——哪怕你通过管道给它传了筛选后的文件列表,只要列表里包含目录,-r就会让clamscan直接递归扫这些目录里的所有文件,完全忽略你原本想用find做的筛选。这就是脚本扫描全部6000个文件的根本原因。
而你在/tmp执行的命令没加-r,clamscan只会处理find输出的每个条目,不会额外递归,所以能正常筛选新文件。
2. -ctime -1的时间范围不符合需求
find的-ctime -1是按24小时为单位计算的,它会匹配过去24小时内状态发生改变的文件,但你需要每小时检查新增文件,应该用-cmin -60(匹配过去60分钟内状态改变的文件),这样时间范围才精准。
修复后的脚本
去掉clamscan的-r参数,修正find的时间参数,还可以加上-type f只筛选文件(避免clamscan处理目录,逻辑更严谨):
#!/bin/bash find /var/www/html/files/ -type f -cmin -60 | clamscan --remove --log=/var/log/clam/clamscan.log
验证逻辑
执行修复后的脚本时,find会精准输出过去1小时内新增/修改的文件,管道传给clamscan后,clamscan只会扫描这些指定文件,不会触发全量扫描。
内容的提问来源于stack exchange,提问作者erax
相关产品推荐
相关产品推荐

