如何编写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定时任务即可:
- 给脚本添加可执行权限:
chmod +x /path/to/your/move_script.sh - 执行
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
相关产品推荐
相关产品推荐

