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

 更新时间:2026年02月12日 08:50:49   作者:IT小本本  
这篇文章主要为大家详细介绍了Shell脚本实现一键快速搞定系统集成异常文件,本文会附上全部源码,感兴趣的小伙伴可以跟随小编一起学习一下

1. 背景描述

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

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

2. 这个脚本的作用

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

  • 自定扫描:递归检查指定目录。
  • 多维信息展示:除了路径,还看文件大小和最后修改时间。
  • 标记异常:在结果中直观地标记出疑似 10KB 的问题文件。
  • 离线查阅:结果输出到文件,方便下载到本地或后续审计。

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 是专门用来获取文件元数据的工具。

  • stat -c%s:直接获取文件字节数,方便进行数学比较。
  • stat -c%y:获取高精度的修改时间。

C. 重定向与格式化输出

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

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

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

相关文章

  • 用shell批量修改文件名的方法

    用shell批量修改文件名的方法

    这篇文章主要为大家介绍了shell对文件夹中全部文件的名称加以批量替换、修改的方法,文中的示例代码讲解详细,对大家的学习或工作有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • bash脚本如何监控cup/内存/磁盘使用率

    bash脚本如何监控cup/内存/磁盘使用率

    本文主要介绍了bash脚本如何监控cup/内存/磁盘使用率,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Shell中select in的具体使用

    Shell中select in的具体使用

    本文主要介绍了Shell中select in的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • linux 中的gzip命令

    linux 中的gzip命令

    gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。接下来通过本文给大家分享linux 中的gzip命令,感兴趣的朋友一起看看吧
    2017-09-09
  • shell 循环命令详解

    shell 循环命令详解

    这篇文章给大家介绍了shell 循环命令的相关知识,包括for命令使用,c 风格 for 命令及while 命令等等,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-10-10
  • Shell获取当前正在执行脚本的绝对路径

    Shell获取当前正在执行脚本的绝对路径

    本文主要介绍了Shell获取当前正在执行脚本的绝对路径,主要有三种方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • shell脚本自动安装jdk的方法示例

    shell脚本自动安装jdk的方法示例

    这篇文章主要介绍了shell脚本自动安装jdk的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 详解Linux查找目录下的按时间过滤的文件

    详解Linux查找目录下的按时间过滤的文件

    这篇文章主要介绍了Linux查找目录下的按时间过滤的文件 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • Shell脚本case语句简明教程

    Shell脚本case语句简明教程

    这篇文章主要介绍了Shell脚本case语句简明教程,非常容易看懂的一篇文章,需要的朋友可以参考下
    2014-07-07
  • Linux 日常常用指令及应用小结

    Linux 日常常用指令及应用小结

    最近在学习一些基本的Linux指令,在这里总结一下,在搭环境中常用的一些指令,熟悉这些指令就基本能够使用CentOS进行日常操作了
    2017-08-08

最新评论