Shell脚本故障:根据文件名日期日数创建late_inzending目录失败
修复Shell脚本:根据子文件夹日期创建
late_inzending目录 原脚本的问题
- 遍历对象错误:原脚本遍历
*/(即Mainfolder下的Jan、Feremans等目录),但日期信息存在于这些目录的子文件夹中,导致根本提取不到有效日期值。 - 目录创建路径错误:
mkdir late_inzending会在脚本执行的当前目录(Mainfolder)创建文件夹,而非在符合条件的子目录(如Jan)下生成目标目录。 - 字段提取逻辑无效:因为遍历的是不含日期的上层目录,
cut命令无法获取到正确的日期片段。
修正后的脚本
# 遍历Mainfolder下的所有一级子目录(Jan、Feremans等) for parent_dir in */; do # 进入当前一级子目录,遍历里面的带日期的子文件夹 for sub_dir in "$parent_dir"*/; do # 从子文件夹名中提取最后一个下划线后的日期字符串 date_str=$(basename "$sub_dir" | awk -F '_' '{print $NF}') # 从日期字符串中提取日部分 day=$(echo "$date_str" | awk -F '-' '{print $3}') # 判断日数是否大于11,满足则创建目录 if (( day > 11 )); then mkdir -p "$parent_dir/late_inzending" # 找到符合条件的项后终止内层循环,避免重复创建目录 break fi done done
修正说明
- 双层遍历逻辑:先遍历Mainfolder下的一级子目录,再遍历每个一级子目录下的带日期子文件夹,确保能定位到含日期信息的目标文件夹。
- 精准提取日期:用
basename获取子文件夹名,结合awk分割出最后一个下划线后的日期字符串,再进一步提取日部分。 - 正确创建路径:通过
"$parent_dir/late_inzending"指定创建路径,确保目录生成在对应一级子目录下;mkdir -p参数避免目录已存在时抛出错误。 - 避免重复操作:内层循环找到第一个符合条件的子文件夹后就终止,防止重复创建同一个
late_inzending目录。
内容的提问来源于stack exchange,提问作者FieldyScop
相关产品推荐
相关产品推荐

