You need to enable JavaScript to run this app. Hadoop HDFS删除文件时排除指定年月备份的grep/awk实现方法
优惠活动
大模型
产品
解决方案
定价
更多

Hadoop HDFS删除文件时排除指定年月备份的grep/awk实现方法

解决方案

1. 参数初始化(自动处理跨年场景)

首先生成可复用的年月参数,无需手动修改,自动处理1月时上月为去年12月的跨年场景:

# 获取当前年月
CURRENT_YEAR=$(date +%Y)
CURRENT_MONTH=$(date +%m)
# 获取上月年月
LAST_YEAR=$(date -d "last month" +%Y)
LAST_MONTH=$(date -d "last month" +%m)

2. 匹配规则说明

你代码中SOMETHING部分使用grep反向匹配规则即可,核心逻辑是排除当月和上月的年月组合,完整规则为:
-vE "${CURRENT_YEAR}-${CURRENT_MONTH}|${LAST_YEAR}-${LAST_MONTH}"
参数说明:

  • -v:grep反向匹配,只输出不包含指定模式的行
  • -E:启用扩展正则表达式,支持|表示多模式或匹配

3. 完整可运行脚本

修正原for循环的语法问题后,完整脚本如下:

# 生成年月参数
CURRENT_YEAR=$(date +%Y)
CURRENT_MONTH=$(date +%m)
LAST_YEAR=$(date -d "last month" +%Y)
LAST_MONTH=$(date -d "last month" +%m)

# 遍历删除非当月、非上月的符合规则文件
for k in $(hdfs dfs -ls /temis_sesions_ip/bkp-cgnat/CDR_IP2MSISDN_CYO-CGN-CC-*.csv.gz \
  | grep -vE "${CURRENT_YEAR}-${CURRENT_MONTH}|${LAST_YEAR}-${LAST_MONTH}" \
  | awk '{print $8}')
do
  hadoop fs -rm "$k"
done

4. 增强严谨性(可选)

如果需要避免匹配到命名不符合规则的异常文件,可以先加一层格式校验:

# 生成年月参数
CURRENT_YEAR=$(date +%Y)
CURRENT_MONTH=$(date +%m)
LAST_YEAR=$(date -d "last month" +%Y)
LAST_MONTH=$(date -d "last month" +%m)

# 先校验命名格式,再排除需要保留的文件
for k in $(hdfs dfs -ls /temis_sesions_ip/bkp-cgnat/CDR_IP2MSISDN_CYO-CGN-CC-*.csv.gz \
  | grep -E 'CDR_IP2MSISDN_CYO-CGN-CC-[0-9]{4}-[0-9]{2}-.+\.csv\.gz' \
  | grep -vE "${CURRENT_YEAR}-${CURRENT_MONTH}|${LAST_YEAR}-${LAST_MONTH}" \
  | awk '{print $8}')
do
  hadoop fs -rm "$k"
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 21:45:03