You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux命令行中Hadoop无法用正则表达式删除指定日期目录问题

解决HDFS中批量删除指定日期子目录的问题

问题原因

Linux终端的shell只会解析本地文件系统的通配符(比如*[21-25]),而HDFS路径不属于本地文件系统,shell不会对其进行通配符扩展,会直接把*[21-25]当作字面量路径传递给hdfs dfs命令,导致HDFS找不到这个不存在的目录,从而报错。另外,你用的*[21-25]写法本身也有问题:[21-25]是单个字符的匹配集合,实际会匹配结尾是1、2、3、4、5的目录,和你要删除21-25日目录的需求不符。

解决方法

方法1:使用HDFS支持的正确Glob模式

HDFS的hdfs dfs命令支持Glob模式匹配,针对你的目录格式(比如2018-12-21),可以直接用以下命令匹配并删除目标目录:

hdfs dfs -rm -r /home/cloudera/logs/2018-Dec/2018-12-2[1-5]

解释:2[1-5]精准匹配最后两位是21、22、23、24、25的目录,HDFS会直接解析这个模式,不需要shell提前扩展。

方法2:通过管道批量筛选并删除(直观易验证)

如果不确定Glob模式是否正确,可以先筛选出目标目录再执行删除,适合新手确认要删的内容:

hdfs dfs -ls /home/cloudera/logs/2018-Dec/ | grep "2018-12-2[1-5]" | awk '{print $8}' | xargs hdfs dfs -rm -r

步骤说明:

  1. hdfs dfs -ls列出指定路径下的所有目录
  2. grep筛选出21-25日的目录行
  3. awk '{print $8}'提取目录的完整路径(ls输出的第8列是路径)
  4. xargs把筛选出的路径传递给删除命令执行操作

方法3:逐个指定目录删除(最稳妥)

如果目录数量不多,也可以直接逐个指定路径删除,避免匹配错误:

hdfs dfs -rm -r /home/cloudera/logs/2018-Dec/2018-12-21 /home/cloudera/logs/2018-Dec/2018-12-22 /home/cloudera/logs/2018-Dec/2018-12-23 /home/cloudera/logs/2018-Dec/2018-12-24 /home/cloudera/logs/2018-Dec/2018-12-25

验证建议

执行删除前,先用hdfs dfs -ls命令验证匹配的目录是否正确,比如:

hdfs dfs -ls /home/cloudera/logs/2018-Dec/2018-12-2[1-5]

如果能列出你要删除的目录,再执行删除命令更安全。

内容的提问来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:30:44