根据传递的值删除 hdfs 中的目录

delete directories in hdfs based on the value passed

我在 HDFS.

中有一些如下所示的目录
/user/$USER/test/date_loaded=2020-07-07/seq=1
/user/$USER/test/date_loaded=2020-07-07/seq=2
/user/$USER/test/date_loaded=2020-07-08/seq=1
/user/$USER/test/date_loaded=2020-07-08/seq=2
/user/$USER/test/date_loaded=2020-07-09/seq=1

我正在尝试删除 date_loaded <= '2020-07-08'

的目录

我喜欢下面

hdfs dfs -rm -R user/$USER/test/date_loaded=2020-07-07
hdfs dfs -rm -R user/$USER/test/date_loaded=2020-07-08

如您所见,我曾经 hdfs cli 语句来实现我想要的。

我想根据我传递的 date_loaded 值使用命令或脚本一次删除目录。

例如

如果我将 date_loaded 值作为 2020-07-08 传递给脚本,则应删除以下目录

/user/$USER/test/date_loaded=2020-07-07/seq=1
/user/$USER/test/date_loaded=2020-07-07/seq=2
/user/$USER/test/date_loaded=2020-07-08/seq=1
/user/$USER/test/date_loaded=2020-07-08/seq=2

我怎样才能达到我想要的

简而言之bash:

#!/bin/bash

prefix=/user/$USER/test/date_loaded=
cutoffdate=2020-07-08

declare -A to_be_removed
shopt -s nullglob
for dir in "$prefix"[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]/; do
    [[ ${dir#"$prefix"} > $cutoffdate/ ]] && break
    to_be_removed[$dir]=1
done

echo rm -rf -- "${!to_be_removed[@]}"

变量USER必须在使用前设置。删除 echo 并将 rm 命令替换为您的命令,确保它能按预期工作。