hadoop fsck / -openforwrite | egrep -v '^\.+$' | egrep "MISSING|OPENFORWRITE" | grep -o "/[^ ]*" | sed -e "s/:$//" | xargs -i hadoop fs -rmr {};
这一串命令的解释如下
中间目的是去掉这个命令输出格式,只要文件名,方便后面进行删除
#hadoop fsck /用来检查hdfs里的档案是否有损毁,产生hdfs健康报告
#openforwrite 打印输出即将写入的文件
官网文档https://hadoop.apache.org/docs/r2.9.1/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html#fsck
# | 表示管道,上一条命令的输出,作为下一条命令参数
# egrep -v '^\.+$' egrep -v表示显示除了与指定的模式匹配的行之外的所有行, '^\.+$' 表示匹配字符串开头含有.+$字符的行,
^有两种意思一种表示非,另一种表示字符串开头,在这里表示字符串的开头
因此就是打印开头不含.+$字符的行
# egrep "MISSING|OPENFORWRITE" 显示包含MISSING|OPENFORWRITE匹配行的文件
# grep -o "/[^ ]*" grep -o 表示仅匹配不空的行,"/[^ ]*"表示匹配/[^字符
(测试了是这样,但是没搞明白具体的正则表达式意思)
# sed -e "s/:$//" 所有的行中如果结尾是: 那么删除它
# xargs -i hadoop fs -rmr {} xargs传递参数,将前一个命令的标准输出作为后一个命令的参数使用,
xargs的-i参数是将前面的标准输出作为参数传递给{}
hadoop fs -rmr [skipTrash] <src> 递归删除文件目录及文件