当然,您可以使用以下 Shell 脚本来上传一周内日期下不同名称的子文件夹中的 txt 文件到 HDFS:
#!/bin/bash
# 获取当前日期
today=$(date +%Y-%m-%d)
# 获取上一周的开始日期和结束日期
last_week_start=$(date -d "$today -$(date +%w) days -7 days" "+%Y-%m-%d")
last_week_end=$(date -d "$last_week_start +6 days" "+%Y-%m-%d")
# 假设文件夹路径为 /path/to/folder
parent_folder="/path/to/folder"
# HDFS 目标路径
hdfs_target_path="/path/on/hdfs/"
# 循环遍历一周内的日期
current_date=$last_week_start
while [[ "$current_date" <= "$last_week_end" ]]
do
# 构造日期对应的文件夹路径
date_folder="$parent_folder/$current_date"
# 检查日期文件夹是否存在
if [ -d "$date_folder" ]; then
# 循环遍历子文件夹
for sub_folder in "$date_folder"/*
do
# 检查子文件夹是否存在
if [ -d "$sub_folder" ]; then
# 构造 HDFS 子目录路径
hdfs_sub_path="$hdfs_target_path$current_date/$(basename "$sub_folder")"
# 创建 HDFS 子目录
hdfs dfs -mkdir -p "$hdfs_sub_path"
# 上传子文件夹中的 txt 文件到 HDFS
hadoop fs -put "$sub_folder"/*.txt "$hdfs_sub_path"
fi
done
fi
# 更新日期至下一天
current_date=$(date -d "$current_date +1 day" "+%Y-%m-%d")
done
请注意,上述示例中的路径 /path/to/folder
和 /path/on/hdfs/
都需要替换为实际的文件夹路径和 HDFS 目标路径。脚本会遍历一周内的日期,并在每个日期文件夹下查找子文件夹,并将这些子文件夹中的 txt 文件上传到对应的 HDFS 子目录中。
确保您的系统上已经安装了 Hadoop 并且具有适当的权限来执行 HDFS 相关操作。
希望以上示例满足您的需求!如果您还有其他问题,请随时提问。