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

如何编写bash脚本按日期命名规则移动指定文件到特定文件夹

Bash脚本实现按月移动首尾日期文件方案

你的文件以纯YYYYMMDD(年月日)格式命名时,文件名字典序和日期先后顺序完全一致,不需要额外做日期解析,直接按文件名排序即可筛选出目标文件,完整实现逻辑如下:

脚本实现

#!/bin/bash
# 按需修改以下两个路径配置
SOURCE_DIR="/your/source/file/path"  # 存放按日生成文件的源目录
TARGET_DIR="/your/target/folder/path" # 文件要移动到的目标目录

# 校验源目录是否可访问
cd "$SOURCE_DIR" || { echo "源目录不可访问,退出执行"; exit 1; }

# 匹配目标月份:如果每月1号执行处理上月文件,用下面这行
TARGET_MONTH=$(date -d "last month" +%Y%m)
# 如果要处理执行当月的文件,注释上面一行,取消下面一行的注释
# TARGET_MONTH=$(date +%Y%m)

# 筛选当月所有符合命名规则的文件并排序
month_files=($(ls -1 "${TARGET_MONTH}"* 2>/dev/null | sort))
file_total=${#month_files[@]}

# 文件数不足4个时直接退出,避免误操作
if [ $file_total -lt 4 ]; then
    echo "目标月份符合规则的文件不足4个,跳过移动"
    exit 0
fi

# 自动创建目标目录(不存在时新建)
mkdir -p "$TARGET_DIR"

# 移动日期最早的2个文件
mv -n "${month_files[0]}" "${month_files[1]}" "$TARGET_DIR/"
# 移动日期最晚的2个文件
mv -n "${month_files[-1]}" "${month_files[-2]}" "$TARGET_DIR/"

echo "目标月份首尾各2个文件已移动完成"

自动执行配置

要实现每月自动运行,直接配置Linux crontab定时任务即可:

  1. 给脚本添加可执行权限:chmod +x /path/to/your/move_script.sh
  2. 执行crontab -e编辑定时规则,比如设置每月1号凌晨2点自动执行脚本处理上月文件,添加以下内容:
0 2 1 * * /bin/bash /path/to/your/move_script.sh

注意事项

  • 脚本中mv使用了-n参数,不会覆盖目标目录下的同名文件,避免误覆盖原有数据
  • 如果你的文件带后缀(比如.log、.txt),只需要把文件匹配规则从"${TARGET_MONTH}"*改成"${TARGET_MONTH}"*.你的后缀即可
  • 脚本默认跳过文件总数不足4个的月份,避免文件不全时移动逻辑出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 20:42:21