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脚本清理异常文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何正确使用Linux命令–du

    如何正确使用Linux命令–du

    这篇文章主要为大家详细介绍了如何正确使用Linux命令–du,具有一定的实用性,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 一个简单的转换输出的shell脚本代码

    一个简单的转换输出的shell脚本代码

    一个简单的转换输出的shell脚本,学习shell脚本的朋友可以看下实现方法
    2013-02-02
  • Linux命令定位与查找之which、whereis和find的用法示例详解

    Linux命令定位与查找之which、whereis和find的用法示例详解

    Linux命令的定位与查找是我们日常工作中必备的技能,掌握which、whereis和find这三个命令,可以帮助我们更加高效地进行文件搜索和定位工作,这篇文章主要介绍了Linux命令定位与查找:which、whereis和find的用法详解,需要的朋友可以参考下
    2023-10-10
  • Shell脚本配合iptables屏蔽来自某个国家的IP访问

    Shell脚本配合iptables屏蔽来自某个国家的IP访问

    这篇文章主要介绍了Shell脚本配合iptables屏蔽来自某个国家的IP访问,本文利用IPdeny的IP数据,然后用Shell脚本导入iptables实现屏蔽IP访问,需要的朋友可以参考下
    2015-04-04
  • 防止ARP攻击的shell代码

    防止ARP攻击的shell代码

    防止ARP攻击,使用命令route、grep、ifconfig等,需要的朋友可以参考下
    2013-02-02
  • Linux shell脚本对常见图片格式批量转换为PDF文件

    Linux shell脚本对常见图片格式批量转换为PDF文件

    Linux Debian12基于ImageMagick图像处理工具编写shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量转PDF文件,”多个图片分开生成多个PDF文件“或者“多个图片合并生成一个PDF文件”,本文详细介绍了Linux shell脚本对常见图片格式批量转换为PDF文件的操作
    2024-12-12
  • Bash Shell脚本学习小结

    Bash Shell脚本学习小结

    今天需要写一个Shell脚本。很简单,判断一个日志文件是否大大于2G,如果大于2G则删除。久了没有写bash,竟然一点都想不起来写了。于是复习了一下,下面对今天的学习做个小结
    2013-01-01
  • Bash重定向完全指南(超详细!)

    Bash重定向完全指南(超详细!)

    Linux命令重定向是一种强大的功能,它允许你将命令的输出(标准输出或标准错误)重定向到文件或其他设备,从而灵活地控制命令的输出和错误信息的处理方式,这篇文章主要介绍了Bash重定向完全指南的相关资料,需要的朋友可以参考下
    2026-01-01
  • Linux中多命令执行'';''和''&&''的区别解释

    Linux中多命令执行'';''和''&&''的区别解释

    大家有没有发现在 Linux 中经常使用到一个命令,如 make && make install,这里也可以使用 make ; make install,那么在 Linux 中执行命令 ; 和 && 有何区别?下面通过这篇文章来给大家详细的介绍下面,有需要的朋友们可以参考借鉴。
    2016-12-12
  • svn服务器启动和svn服务器重启、停止等操作脚本分享

    svn服务器启动和svn服务器重启、停止等操作脚本分享

    这篇文章主要介绍了svn服务器启动和svn服务器重启、停止等操作脚本,需要的朋友可以参考下
    2014-03-03

最新评论