HDFS删除特定后缀文件报错:执行hadoop fs命令提示找不到文件或目录
HDFS删除所有特定结尾文件的正确方法
你之前的命令报错,核心原因是本地shell会优先解析通配符*,导致HDFS收到的不是你预期的路径,而是本地目录下匹配不到的文件,所以出现“找不到文件或目录”的错误。下面是两种可靠的解决方法:
方法一:用引号包裹路径,让HDFS处理通配符
把包含通配符的路径用双引号或单引号括起来,避免本地shell解析,直接把通配符交给HDFS命令处理:
- 删除指定路径下直接子目录中的目标文件(比如删除
/path下所有以.tmp结尾的文件):
hadoop fs -rm "/path/*.tmp"
- 递归删除所有子目录中的目标文件(包括
/path下多层子目录里的文件):
hadoop fs -rm -R "/path/**/*.tmp"
注:**是HDFS支持的递归通配符,大部分主流版本默认支持,部分旧版本可能需要开启相关配置。
方法二:先查找再删除(更安全)
如果担心误删,可以先用find命令列出所有符合条件的文件,确认无误后再执行删除:
- 列出目标文件:
hadoop fs -find /path -name "*.tmp"
- 确认列表正确后,执行删除:
hadoop fs -find /path -name "*.tmp" | xargs hadoop fs -rm
这种方式能提前看到要删除的所有文件路径,大幅降低误删风险。
注意事项
- 如果只需要删除文件,不需要加
-R参数,-R会递归删除目录,谨慎使用; - 确保你有目标路径的删除权限,否则会出现权限报错。
内容的提问来源于stack exchange,提问作者weimiao
相关产品推荐
相关产品推荐

