linux shell

关注公众号 jb51net

关闭
首页 > 脚本专栏 > linux shell > Shell脚本清理异常文件

Shell脚本实现一键快速搞定系统集成异常文件(附全部源码)

作者:IT小本本

这篇文章主要为大家详细介绍了Shell脚本实现一键快速搞定系统集成异常文件,本文会附上全部源码,感兴趣的小伙伴可以跟随小编一起学习一下

1. 背景描述

最近在和别的系统做数据集成的时候,遇到异常截断同步错误的情况。 pdf,doc,txt等附件在Linux服务器 /data/fileFtp 目录,发现大量文件大小为 10KB,或者更小的的文件。这往往不是巧合,而是集成系统推过来的数据有问题,给过来的数据看着是“xxxx.pdf”,而文件大小只有几KB,并且这个文件打开提示文件是损坏的!!

为了从数千个文件中快速锁定这些“害群之马”文件,我写了一个自动化脚本。

2. 这个脚本的作用

这个脚本,能够满足以下三个条件:

3. 脚本实现:check_files.sh

下面是编写了的为 check_files.sh 的脚本。

#!/bin/bash

# 配置要扫描的根目录
TARGET_DIR="/data/fileFtp"
# 定义输出结果文件,加入时间戳防止覆盖
LOG_FILE="check_results_$(date +%Y%m%d).log"

echo "开始扫描: $TARGET_DIR ..."

{
    echo "=========================================================================="
    echo " 扫描报告 | 目录: $TARGET_DIR | 生成时间: $(date '+%Y-%m-%d %H:%M:%S')"
    echo "=========================================================================="
    printf "%-12s | %-12s | %-20s | %s\n" "扫描检查结果" "大小" "修改时间" "路径"
    echo "--------------------------------------------------------------------------"

    # 使用 find 寻找所有文件
    find "$TARGET_DIR" -type f | while read -r file; do
        # 获取字节大小
        size_bytes=$(stat -c%s "$file")
        # 获取人类直观大小 (如 10K)
        size_human=$(ls -lh "$file" | awk '{print $5}')
        # 获取修改时间 (yyyy-mm-dd hh:mm:ss)
        mtime=$(stat -c%y "$file" | cut -d'.' -f1)
        
        # 逻辑判断:如果文件在 9k-10k 之间 (Linux find 逻辑)
        if [ "$size_bytes" -ge 9216 ] && [ "$size_bytes" -le 10240 ]; then
            status="[ ISSUE ]"
        else
            status="[  OK   ]"
        fi

        printf "%-12s | %-12s | %-20s | %s\n" "$status" "$size_human" "$mtime" "$file"
    done
} > "$LOG_FILE"

echo "扫描完成!报告已生成: $LOG_FILE"

4.如何使用该脚本

创建脚本文件:

vi check_files.sh (将上面的代码粘贴进去并保存退出)。

赋予执行权限:

 chmod +x check_files.sh

运行脚本:

./check_files.sh

进行查看结果:

cat   check_results_20260210.log   

只查看异常文件:

grep 'ISSUE' check_results_20260210.log

统计异常数量:

grep -c 'ISSUE' check_results_20260210.log

5. 关键技术点深度解析

A. 文件状态的判断逻辑

在脚本中,我们使用了字节区间判断:

if [ "$size_bytes" -ge 9216 ] && [ "$size_bytes" -le 10240 ];

这是因为在 Linux 中,find -size 10k 实际上匹配的是 9KB 到 10KB 之间的数据。通过手动设定字节范围,我们可以更精确地控制“可疑”的定义。

B.stat命令的高效利用

相比于 ls 命令,stat 是专门用来获取文件元数据的工具。

C. 重定向与格式化输出

脚本最后使用了 { ... } > "$LOG_FILE"。这种写法将整个代码块的 stdout(标准输出)一次性重定向到文件中,比在每一行后面写 >> 要优雅且高效得多。

与系统做集成的,一定要用这个脚本自己查一下,不然推过来的数据,用的时候,有问题,真的是愁死人啊! 通过这个简单的 Shell 脚本,我们将枯燥的人肉搜索转变为精准的自动化审计。

到此这篇关于Shell脚本实现一键快速搞定系统集成异常文件(附全部源码)的文章就介绍到这了,更多相关Shell脚本清理异常文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文