定时清理无效动态链接的脚本

wen 实用脚本 2

本文目录导读:

定时清理无效动态链接的脚本

  1. 如何使用
  2. 其他说明
#!/bin/bash
# 定时清理无效动态链接脚本
# 功能:扫描指定目录中的符号链接,删除无效(目标不存在)的链接
# 配置区域
SCAN_DIR="/path/to/your/symlinks"   # 要扫描的目录(可改为实际路径)
LOG_FILE="/var/log/clean_broken_links.log"  # 日志文件路径
DRY_RUN=false                       # 设为 true 时只输出不删除(测试用)
# 函数:记录日志
log_message() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
# 检查扫描目录是否存在
if [ ! -d "$SCAN_DIR" ]; then
    echo "错误:目录 $SCAN_DIR 不存在!" >&2
    exit 1
fi
log_message "开始扫描目录:$SCAN_DIR"
# 查找无效的符号链接
# 使用 -L 判断符号链接是否损坏(-L 对损坏链接返回 false)
invalid_links=$(find "$SCAN_DIR" -type l ! -exec test -e {} \; -print 2>/dev/null)
if [ -z "$invalid_links" ]; then
    log_message "没有发现无效链接。"
else
    log_message "发现以下无效链接:"
    echo "$invalid_links" | while IFS= read -r link; do
        log_message "  正在处理:$link"
        if [ "$DRY_RUN" = false ]; then
            # 删除无效链接
            rm -f "$link"
            if [ $? -eq 0 ]; then
                log_message "  已删除:$link"
            else
                log_message "  删除失败:$link"
            fi
        else
            log_message "  [测试模式] 将要删除:$link"
        fi
    done
fi
log_message "清理完成。"

如何使用

  1. 保存脚本
    将上述内容保存为 clean_broken_links.sh,并赋予执行权限:

    chmod +x clean_broken_links.sh
  2. 修改配置

    • SCAN_DIR 改为你要检查的实际目录(/usr/local/bin)。
    • 可选:调整 LOG_FILE 的路径。
    • 首次运行时建议设置 DRY_RUN=true,只查看将删除哪些文件而不实际删除。
  3. 测试运行

    ./clean_broken_links.sh
  4. 设置定时任务(cron)
    使用 crontab -e 添加以下一行(每天凌晨3点执行):

    0 3 * * * /path/to/clean_broken_links.sh

    也可根据需要调整时间(例如每小时执行:0 * * * *)。


其他说明

  • 查找无效链接的原理
    使用 find -type l 找到符号链接,再用 ! -exec test -e {} \; 测试目标是否存在,如果目标不存在,则视为无效链接。
  • 日志记录
    所有操作均记录到日志文件,方便事后审计。
  • 安全提醒
    该脚本会直接删除无效符号链接,请确保扫描目录正确,并先以 DRY_RUN=true 模式验证。

如果你需要更复杂的场景(如递归清理、按时间过滤等),可以在 find 命令中增加参数,

# 只清理7天前失效的链接
find "$SCAN_DIR" -type l ! -exec test -e {} \; -mtime +7 -delete

抱歉,评论功能暂时关闭!