如何将上周修改、以C开头的CSV文件移至指定路径并配置Cron定时任务
实现方案
1. 核心筛选与移动命令
使用find命令精准匹配目标文件并移动,逻辑如下:
- 仅在源目录一级查找(不递归子目录)
- 匹配以
C开头的.csv文件 - 筛选修改时间在上周一0:00:00至上周日0:00:00的文件
- 将符合条件的文件移动到备份目录
直接执行的命令:
find /home/initialdirectory -maxdepth 1 -type f -name "C-*.csv" -newermt "$(date -d 'Monday last week' +%Y-%m-%d) 00:00:00" ! -newermt "$(date -d 'Sunday last week' +%Y-%m-%d) 00:00:00" -exec mv {} /home/initialdirectory/backup/ \;
命令参数说明
-maxdepth 1:限制查找范围为源目录本身,不遍历子目录-type f:仅匹配文件,排除目录类型-name "C-*.csv":匹配文件名以C-开头、.csv结尾的文件-newermt <时间>:筛选修改时间晚于指定时间的文件! -newermt <时间>:筛选修改时间不晚于指定时间的文件-exec mv {} <目标目录> \;:对每个找到的文件执行移动操作
2. 配置Cron定时任务
要在每周日0:00:00自动执行上述操作,需配置Cron任务,推荐两种方式:
方式一:直接写入Cron表达式
编辑当前用户的Cron任务列表:
crontab -e
添加以下内容(注意单引号转义):
0 0 * * 0 /bin/bash -c 'find /home/initialdirectory -maxdepth 1 -type f -name "C-*.csv" -newermt "$(date -d '\''Monday last week'\'' +%Y-%m-%d) 00:00:00" ! -newermt "$(date -d '\''Sunday last week'\'' +%Y-%m-%d) 00:00:00" -exec mv {} /home/initialdirectory/backup/ \;'
方式二:使用脚本维护(推荐)
将命令封装为脚本,便于后续修改和维护:
- 创建脚本文件
/home/initialdirectory/move_c_files.sh:
#!/bin/bash # 定义目录路径 SOURCE_DIR="/home/initialdirectory" BACKUP_DIR="/home/initialdirectory/backup" # 确保备份目录存在,不存在则自动创建 mkdir -p "$BACKUP_DIR" # 计算上周周一和周日的起始时间 LAST_MONDAY=$(date -d 'Monday last week' +%Y-%m-%d)" 00:00:00" LAST_SUNDAY=$(date -d 'Sunday last week' +%Y-%m-%d)" 00:00:00" # 执行查找与移动操作 find "$SOURCE_DIR" -maxdepth 1 -type f -name "C-*.csv" -newermt "$LAST_MONDAY" ! -newermt "$LAST_SUNDAY" -exec mv {} "$BACKUP_DIR"/ \;
- 给脚本添加执行权限:
chmod +x /home/initialdirectory/move_c_files.sh
- 编辑Cron任务,添加定时执行脚本的规则:
0 0 * * 0 /home/initialdirectory/move_c_files.sh
3. 注意事项
- 提前验证:执行脚本或直接运行
find命令时,可先将mv替换为ls,确认筛选出的文件符合预期 - 路径问题:Cron环境变量有限,建议命令和脚本都使用绝对路径,避免出现"命令找不到"的错误
- 目录保障:脚本中已加入
mkdir -p命令,避免因备份目录不存在导致移动失败
内容的提问来源于stack exchange,提问作者Yannis_Tr
相关产品推荐
相关产品推荐

