首页 > 解决方案 > 通过 shell 删除 HDFS 上的文件,其中文件名包含低于给定值的数字

问题描述

我已经搜索了其他现有问题,但没有成功。

在 spark 作业结束时,我需要通过 sh 脚本进行一些清理。目标是删除名称中包含低于给定值的数字的任何文件。

例如,让我们考虑这个 HDFS 文件夹结构

myDirectory
  myFile_20210315.csv
  myFile_20210316.csv
  myFile_20210317.csv

我想用参数 20210316 启动 SH 脚本,并且它只删除 myFile_20210315.csv。

到目前为止,我有这个命令能够隔离文件的数字部分,但我不知道下一步:

hdfs dfs -ls myDirectory/myFile*.csv | awk '{print $8}' | sed -e s/[^0-9]//g

标签: shellhdfs

解决方案


最终找到了解决方案。下面是脚本。

我称脚本为 ./myScript.sh 20210315

for f in `hdfs dfs -ls myDirectory/*.csv | awk '{print $8}'`;
do
  echo Processing $f
  fileNumberValue=`hdfs dfs -ls $f | awk '{print $8}' | sed -e s/[^0-9]//g`
  if [ $fileNumberValue -lt "$1" ]; then
    echo $fileNumberValue inferior to "$1" : deleting $f on HDFS
    hdfs dfs -rm $f
  fi
done 

推荐阅读