如何批量生成日期递增的shell命令,创建指定范围的hadoop目录
实现方案
你可以通过shell自带的date命令的日期计算能力实现批量生成,有两种常用实现思路:
方案1:生成你需要的逐行静态脚本
执行下面的代码即可直接生成符合要求的目标脚本:
#!/bin/bash # 写入脚本头 echo '#!/bin/bash' > batch_mkdir.sh # 配置起止日期 start="2020-11-25" end="2021-06-30" curr="$start" while [ "$curr" != "$(date -d "$end +1 day" +%Y-%m-%d)" ]; do echo "hadoop fs -mkdir -p /user/hadoop-mining/SEARCH/$curr/ | true" >> batch_mkdir.sh curr=$(date -d "$curr +1 day" +%Y-%m-%d) done
生成的batch_mkdir.sh就是你要的效果,所有日期按顺序逐行排列,你可以先检查内容是否正确再执行。
方案2:直接循环执行,不用生成静态脚本
如果不需要保留逐行的静态脚本,也可以直接用循环执行mkdir命令,效果完全一致:
#!/bin/bash start="2020-11-25" end="2021-06-30" curr="$start" while [ "$curr" != "$(date -d "$end +1 day" +%Y-%m-%d)" ]; do hadoop fs -mkdir -p /user/hadoop-mining/SEARCH/$curr/ | true curr=$(date -d "$curr +1 day" +%Y-%m-%d) done
注意事项
- 以上写法适用于Linux系统(GNU Date),如果是macOS系统,需要把日期递增的代码替换为:
curr=$(date -v+1d -j -f "%Y-%m-%d" "$curr" +%Y-%m-%d) - 也可以用Python、AWK等其他语言实现日期遍历逻辑,核心思路都是从起始日期按天遍历到结束日期,拼接生成对应命令即可。
内容的提问来源于stack exchange,提问作者Bowen Peng
相关产品推荐
相关产品推荐

