You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写需用户确认再删除的Bash脚本:如何统计早于指定天数的文件数量

Bash 按天数归档文件脚本实现方案

一、符合时间条件的文件数量统计方法

你之前写法报错的核心原因是命令替换语法错误,执行命令并将结果赋值给变量需要用$()包裹命令,同时-mtime参数需要加符号前缀:+天数代表早于指定天数,-天数代表晚于指定天数,无符号代表刚好是指定天数修改的文件。

通用统计写法(适合绝大多数场景)

# 统计当前目录下早于$days天的普通文件数量
file_count=$(find . -type f -mtime +"$days" | wc -l)

兼容特殊文件名的统计写法(文件名含换行符时也能正确统计)

file_count=$(find . -type f -mtime +"$days" -printf '.' | wc -c)

统计完成后可以直接判断数值:

if [ "$file_count" -eq 0 ]; then
    echo "未找到符合条件的文件"
    exit 0
fi
echo "共找到${file_count}个符合条件的文件"

二、满足需求的完整脚本实现

以下脚本完全覆盖你需要的所有功能:文件数量统计、全局操作确认、单文件归档确认、压缩包移动确认:

#!/bin/bash
# 1. 校验天数输入合法性
read -p "请输入归档的天数阈值(将归档早于该天数的文件):" days
if ! [[ "$days" =~ ^[0-9]+$ ]]; then
    echo "输入错误,请输入正整数"
    exit 1
fi

# 2. 统计符合条件的文件数量
file_count=$(find . -type f -mtime +"$days" -printf '.' | wc -c)
if [ "$file_count" -eq 0 ]; then
    echo "未找到早于${days}天的文件,脚本退出"
    exit 0
fi
echo "共找到${file_count}个符合条件的文件,是否继续处理?(y/n)"
read -n1 global_confirm
echo
if [ "${global_confirm,,}" != "y" ]; then
    echo "用户取消操作,脚本退出"
    exit 0
fi

# 3. 逐文件确认后归档并删除
zip_name="packed.zip"
# 先删除已存在的旧压缩包避免冲突
[ -f "$zip_name" ] && rm "$zip_name"

find . -type f -mtime +"$days" -print0 | while IFS= read -r -d '' file; do
    echo "是否归档文件:$file ?(y/n/s=跳过所有)"
    read -n1 file_confirm
    echo
    case "${file_confirm,,}" in
        y)
            zip "$zip_name" "$file"
            # 压缩成功后删除源文件
            if [ $? -eq 0 ]; then
                rm -f "$file"
                echo "已归档并删除源文件:$file"
            fi
            ;;
        s)
            echo "跳过后续所有文件"
            break
            ;;
        *)
            echo "已跳过文件:$file"
            ;;
    esac
done

# 4. 确认后移动压缩包到根目录
if [ -f "$zip_name" ]; then
    echo "是否将压缩包${zip_name}移动到根目录?(y/n)"
    read -n1 mv_confirm
    echo
    if [ "${mv_confirm,,}" = "y" ]; then
        mv "$zip_name" /
        echo "已将压缩包移动到根目录"
    else
        echo "压缩包保留在当前目录"
    fi
fi

关键逻辑说明

  • 用-print0 + read -d ''的写法遍历文件,完美兼容文件名带空格、换行、特殊符号的场景,不会出现遍历报错
  • 所有确认步骤支持大小写输入,输入Y/y都会识别为同意
  • 新增了跳过所有剩余文件的选项,文件数量较多时可以快速操作
  • 所有操作都加了成功校验,避免压缩失败误删源文件
  • 如果需要归档刚好等于指定天数、或晚于指定天数的文件,修改-mtime +"$days"的符号即可:去掉+代表刚好等于指定天数,改成-代表晚于指定天数

内容的提问来源于stack exchange,提问作者socke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:15:08