Linux 使用脚本删除文件

Linux 使用脚本删除文件

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

脚本编写

bash 复制代码
#!/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

测试验证

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

正式运行

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

定时任务配置

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

crontab -l   # 查看定时任务

问题

执行脚本 ./clean_pdf.sh 时提示

-bash: ./clean_pdf.sh:/bin/bash^M:解释器错误: 没有那个文件或目录

原因

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

解决方案

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

bash 复制代码
sed -i 's/\r$//' clean_pdf.sh

# 验证
cat -v clean_pdf.sh | head -1
# 显示结果不带 ^M 则成功。如果显示结果没有^M,执行仍有此异常,则找其他方法处理
相关推荐
OpenPomeloxCommunity14 小时前
Linux 同步机制之 spinlock 设计与实现(二):ARM32实现
linux
爱莉希雅&&&15 小时前
Rocky Linux 10.1 + K8s 1.36.3 离线集群部署笔记(Kubernetes)
linux·笔记·docker·kubernetes·calico
三84415 小时前
基于 NFS 共享存储的 Nginx Web 服务部署项目
linux·运维·服务器
逻极15 小时前
Shell脚本实战:从“能跑”到“高效”的3个关键跃升
linux·服务器·shell·脚本
ARM|X86+FPGA工业主板厂家15 小时前
Linux+Xenomai 实时系统在机器人中的应用
linux·运维·机器人
唔6615 小时前
Linux工具使用情况buildroot
linux·运维·服务器
云泽80815 小时前
Linux 核心机制详解(三):文件系统权限与共享安全——从删除规则到粘滞位防护
linux·运维·安全
码农阿豪15 小时前
Prometheus怎么监控另一台Linux服务器?Node Exporter配置教程
linux·服务器·prometheus
xywww16816 小时前
Claude Opus 5 API 接入实战:国内项目上线前的网络、Key、限流和排错清单
大数据·linux·网络·数据库·云计算·aws
ShineWinsu16 小时前
对于Linux:http的解析
linux·网络·c++·网络协议·http·请求·响应