UNIX系统下复制指定日期及之后含日期时间戳的文件至目标目录
按文件名中的日期筛选并复制文件
需求说明
需从UNIX系统的源目录中,复制文件名符合HUX_CRUX_ING_YYYYMMDDxxxxxxxxxxxx格式、且日期部分(YYYYMMDD)≥指定日期的所有文件到目标目录。以示例为例,指定日期为20221031时,需复制文件名包含20221031及之后日期的文件。
方法一:使用find命令(推荐,适用于大量文件)
通过find批量匹配文件,结合bash子脚本提取日期并筛选:
# 配置参数 SOURCE_DIR="/实际源目录路径" TARGET_DIR="/实际目标目录路径" TARGET_DATE="20221031" # 执行查找与复制 find "$SOURCE_DIR" -maxdepth 1 -type f -name "HUX_CRUX_ING_*" -exec bash -c ' for file do # 提取文件名中的8位日期部分 file_date="${file##*_}" file_date="${file_date:0:8}" # 日期对比,符合条件则复制 if [ "$file_date" -ge "$TARGET_DATE" ]; then cp "$file" "$TARGET_DIR" fi done ' bash {} +
-maxdepth 1:仅处理源目录下的文件,不递归子目录(需要递归可删除该参数)-type f:仅匹配文件,排除目录- 若需保留文件权限、修改时间等属性,替换
cp为cp -p
方法二:Bash循环(适用于少量文件,逻辑直观)
直接遍历源目录下的目标前缀文件,逐个筛选复制:
# 配置参数 SOURCE_DIR="/实际源目录路径" TARGET_DIR="/实际目标目录路径" TARGET_DATE="20221031" # 进入源目录,遍历并筛选文件 cd "$SOURCE_DIR" || exit 1 for file in HUX_CRUX_ING_*; do if [ -f "$file" ]; then file_date="${file##*_}" file_date="${file_date:0:8}" if [ "$file_date" -ge "$TARGET_DATE" ]; then cp "$file" "$TARGET_DIR" fi fi done
cd "$SOURCE_DIR" || exit 1:确保进入源目录失败时终止脚本,避免错误操作- 同样可替换
cp为cp -p保留文件属性
注意事项
- 替换脚本中的
/实际源目录路径和/实际目标目录路径为系统中的真实路径 TARGET_DATE可修改为任意YYYYMMDD格式的日期- 若文件名包含空格等特殊字符,脚本已通过双引号包裹变量确保兼容
内容的提问来源于stack exchange,提问作者Nandini
相关产品推荐
相关产品推荐

