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,执行仍有此异常,则找其他方法处理
相关推荐
怪我冷i9 小时前
wsl Ubuntu切换中科大源
linux·windows·ubuntu·ai编程·ai写作
QT 小鲜肉9 小时前
【Linux命令大全】001.文件管理之chgrp命令(实操篇)
android·linux·运维·笔记
qq13267029409 小时前
grafana 未授权访问漏洞设置iptables指定IP访问,拒绝其他所有IP
linux·服务器·网络·iptables·防火墙策略
春日见9 小时前
ubuntu以前可以联网,突然无法上网了
linux·服务器·ubuntu·debug
鸠摩智首席音效师9 小时前
如何在 CentOS 上设置 Apache Worker MPM ?
linux·centos·apache
Neolnfra9 小时前
SMB、FTP、MySQL... 配置不当,即是漏洞
linux·数据库·mysql·安全·网络安全·系统安全·安全架构
一点晖光9 小时前
centos安装ffmpeg环境
linux·ffmpeg·centos
蟑螂恶霸9 小时前
ubuntu 20.04 移除旧版systemback, 安装新版1.8.5, 支持大型ISO镜像
linux·服务器·ubuntu
JPX-NO9 小时前
ubuntu编译安装FreeRDP Version 3.x.x 版本
linux·ubuntu