最近我尝试编写一个bash脚本来管理hdfs中的一些目录,以便与kafka一起工作。
假设在hdfs中有这样一个目录:
/tmp/my_dir/state=a
当我列出这个目录时 hdfs dfs -ls /tmp/my_dir/state=a
结果是:
part=2020-05-10
part=2020-05-11
.
.
.
part=2020-05-20
每个文件夹都包含一些文件,我想根据特定日期将这些文件夹分为两个目录。
我的目标是创建两个目录 version=1
以及 version=2
我想根据一个特定的日期,将每个零件文件夹移到这两个目录中,这样所有日期较小的零件文件夹都将移到
/tmp/my_dir/version=1/state=a
其他人去
/tmp/my_dir/version=2/state=a
我准备了这个代码,但它不能正常工作。有人能帮我改正一下吗?
for fullname in `hdfs dfs -ls /tmp/my_dir/state=a | awk '{print $NF}' | grep part | tr '\n' ' '`; do
name=$(basename $fullname)
if [[ "${name#*=}" < "$selected_date" ]]; then
hdfs dfs -mv $fullname /tmp/my_dir/version=1/state=a
else
hdfs dfs -mv $fullname /tmp/my_dir/version=2/state=a
fi
done
2条答案
按热度按时间qlckcl4x1#
通过提供
-p
的标志mkdir
:作为一般建议,我建议使用更好的命名约定。在这种情况下,
v1/state_a/
以及v2/state_a/
是合适的(甚至v1/state/a/
).iqih9akk2#
我发现了我的问题!
只是因为我没有创建内部目录,我应该在循环指令之前使用以下命令: