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,执行仍有此异常,则找其他方法处理
相关推荐
2035去旅行6 小时前
bootcmd 详细讲解
linux·嵌入式·arm·soc
陈希1237 小时前
Linux 防火墙配置实战:firewalld、iptables 与云安全组
linux·运维·服务器
女神下凡8 小时前
芯参谋(95):嵌入式文件系统_开发指南
linux·服务器·arm开发·驱动开发·设计规范
且从容.11 小时前
Ubuntu安装flume
linux·ubuntu·flume
承渊政道12 小时前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
且从容.15 小时前
ubuntu安装flink
linux·ubuntu·flink
爱和冰阔落16 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨16 小时前
WSL2的安装与使用
linux·wsl
微小的鱼16 小时前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng17 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器