Linux 使用脚本删除文件


服务器部署了下载文件服务,文件不需要存档,避免占用内存,编写脚本删除60天前下载的文件,包括目录下空文件夹。增加定时任务,每日执行。因为文件都是pdf文件,所以限制了文件类型。

脚本编写

#!/bin/bash
TARGET_DIR="/home/file/download"   # 目标目录(根据实际路径修改)
LOG_FILE="/home/file/download/pdf_clean.log"
DRY_RUN=false  # 调试时设为true

# 创建日志目录(如果不存在)
mkdir -p "$(dirname "$LOG_FILE")"

# 核心清理逻辑
{
    echo "===== PDF清理任务启动 ====="
    echo "目标目录: $TARGET_DIR"
    echo "运行时间: $(date)"
    echo "运行模式: $([ "$DRY_RUN" = true ] && echo "测试模式" || echo "正式删除")"
    echo "--------------------------------------"

    # 第一步:删除60天前的PDF文件(含子目录)
    find "$TARGET_DIR" -name "*.pdf" -type f -mtime +60 2>>"$LOG_FILE" | while IFS= read -r file; do
        if [ "$DRY_RUN" = true ]; then
            echo "[测试] 将删除: $file"
        else
            rm -v "$file"
            echo "[删除] $file"
        fi
    done >> "$LOG_FILE"
    
    # 第二步:清理空目录(关键新增逻辑)
    if [ "$DRY_RUN" = true ]; then
        echo "[测试] 将扫描空目录"
    else
        # 查找空目录并删除
        find "$TARGET_DIR" -type d -empty -exec echo "[清理] 删除空目录: {}" \; -exec rmdir -v {} \; 2>> "$LOG_FILE"
    fi

    # 记录完成状态
    echo "======================================"
    echo "任务完成 | $(date)"
    echo "======================================"
} >> "$LOG_FILE" 2>&1

脚本部署

  • 将脚本保存为 clean_pdf.sh
  • 赋予执行权限(root账号):chmod +x clean_pdf.sh

测试验证

# 修改脚本属性 
DRY_RUN=true 
# 保存后执行脚本
./clean_pdf.sh
#查看日志
cat pdf_clean.log # 检查预览结果

正式运行

# 修改脚本属性 
DRY_RUN=false
# 保存后执行脚本
./clean_pdf.sh
# 确认空目录已被删除
tree /home/file/download

定时任务配置

crontab -e  # 编辑cron配置
# 添加以下行(每天凌晨3点执行)
0 3 * * * /bin/bash /home/file/clean_pdf.sh

crontab -l   # 查看定时任务

# 取消定时任务,如果有多个任务建议先备份
# 1. 执行 crontab -l 列出所有任务,记录需取消的任务条目
# 2. crontab -e 进入vim编辑器,删除对应行后保存退出(:wq)

问题

执行脚本 ./clean_pdf.sh 时提示
-bash: ./clean_pdf.sh:/bin/bash^M:解释器错误: 没有那个文件或目录

原因

脚本在Windows下编辑后,换行符为\r\n(CRLF),而Linux要求\n(LF)。^M(\r的转义表示)导致解释器路径错误

解决方案

使用转义写法(适用于脚本中)

sed -i 's/\r$//' clean_pdf.sh

# 验证
cat -v clean_pdf.sh | head -1
# 显示结果不带 ^M 则成功。如果显示结果没有^M,执行仍有此异常,则找其他方法处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值