如何基于grep含ERROR的结果移动指定目录下的文件
实现方案
直接在循环内通过一次grep完成匹配判断,同时执行移动操作,以下是两种可行写法:
写法一(切换到目标目录操作)
cd /var/list || exit for i in TB.*; do # 静默检查日志中是否存在包含ERROR和当前文件名的行 if grep -q "ERROR.*$i" /var/sup/logs.txt; then mv "$i" /var/last/ echo "已移动: $i" # 可选,用于查看操作结果 fi done
写法二(使用完整路径)
如果不想切换目录,可通过提取文件名来匹配:
for i in /var/list/TB.*; do filename=$(basename "$i") if grep -q "ERROR.*$filename" /var/sup/logs.txt; then mv "$i" /var/last/ fi done
核心细节说明
grep -q:静默模式,仅返回匹配状态(成功/失败),不输出匹配内容,适合作为条件判断依据ERROR.*$i:正则表达式,确保日志行中同时包含"ERROR"和当前文件名,适配你给出的ERROR: TB.1234.txt格式cd /var/list || exit:切换目录失败时直接退出脚本,避免后续因路径错误执行无效操作- 确保
/var/last目录存在且有足够写入权限,否则移动操作会失败
内容的提问来源于stack exchange,提问作者Jiggen
相关产品推荐
相关产品推荐

