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

如何结合find命令实现30天以上文件归档并删除源文件的Bash脚本

脚本修改方案

原脚本未做30天修改时间过滤,直接用find命令做前置筛选即可实现需求,同时修复原脚本遇到特殊文件名易出错、复制失败仍删除源文件的隐患。

核心修改逻辑

  • 用find命令筛选当前目录下修改时间达到30天及以上的文件/文件夹,遍历范围和原脚本一致(仅处理当前目录直接内容,不递归子目录)
  • 保留原脚本「源文件比目标位置同名文件更新、或目标位置无对应文件时才执行复制」的判断,避免覆盖目标端更新的备份
  • 增加复制结果校验:只有复制成功才删除源文件,避免复制失败导致数据丢失

修改后完整脚本

#!/bin/bash

# 功能函数
help()
{
echo "使用方法: archiveer <目标归档目录>
示例: archiveer /home/backup/archive

该命令会自动将当前目录下修改时间超过30天的文件/文件夹归档到指定目录,仅当源文件更新或目标无对应文件时执行复制,复制完成后删除源文件。
目标归档目录为必填参数。"
exit
}

do_archive()
{
echo "开始执行归档操作"
# 用find筛选符合时间要求的文件/文件夹,兼容带特殊字符的文件名
find . -maxdepth 1 -mindepth 1 -mtime +29 -print0 | while IFS= read -r -d '' f
do
    # 去掉find输出的./前缀,拿到纯文件名
    filename="${f#./}"
    target_path="${doelmap}/${filename}"
    
    if [[ "${filename}" -nt "${target_path}" ]]
    then
        echo "文件/文件夹 ${filename} 比目标端更新或目标端不存在,开始归档"
        # 复制成功才删除源文件
        if cp -rp "$f" "$target_path"; then
            rm -rf "$f"
            echo "${filename} 归档完成,已删除源文件"
        else
            echo "错误:${filename} 复制失败,保留源文件"
        fi
    else
        echo "文件/文件夹 ${filename} 目标端已存在更新版本,跳过"
    fi
done
}

# 参数校验
if [[ $1 = "help" || $1 = "-h" || $1 = "--help" ]]
then
    help
elif [[ -z $1 ]]
then
    echo "错误:缺少必填参数!"
    help
fi

# 初始化变量,自动去掉目标路径末尾的斜杠避免拼接错误
doelmap=${1%/}

echo "归档目标目录: ${doelmap}"
sleep 1

# 检查目标目录是否存在
if [ ! -d "${doelmap}" ]
then
    mkdir -p "${doelmap}"
    echo "目标目录 ${doelmap} 已自动创建"
else
    echo "目标目录已存在"
fi

do_archive
echo "脚本执行结束"

关键参数说明

  • find命令参数解释:
    • -maxdepth 1 -mindepth 1:仅遍历当前目录下的直接文件/文件夹,不递归进入子目录,和原脚本for f in *的遍历范围完全一致
    • -mtime +29:筛选修改时间距离当前时间满30天及以上的条目。find的mtime按24小时为单位向下取整计算,如果写-mtime +30实际匹配的是31天及以上未修改的文件,+29刚好覆盖30天整及以上的需求范围
    • -print0配合read -d '':用空字符作为文件名分隔符,兼容带空格、换行、特殊符号的文件名,避免遍历出错
  • 路径处理增加了末尾斜杠自动去除逻辑,避免手动输入路径时末尾多打/导致路径拼接错误
  • 复制操作增加了返回值校验,只有cp命令执行成功才会删除源文件,避免数据丢失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:36:22