2017-08-06 827 views
1

我有一个9k分区的表,其中我想删除约1200(表示3天)
我想结合hadoop fs -rm和这3天的正则表达式,例如pr_load_time=2017070([1-4])(\d+)正则表达式的Hadoop fs -rm

的分区是这样的(我想匹配只有前两个在这里)

pr_load_time=20170701000317 
pr_load_time=20170704133602 
pr_load_time=20170705000317 
pr_load_time=20170706133602 

是这样的可能吗?我正在考虑用awk匹配分区并使用xargs,但这似乎是删除如此大量文件的非常缓慢的方法。然而

+1

如果这是你n只运行一次,运行4个通配符删除:'hadoop fs -rm“/ path/pr_load_time = 20170701 *”',...'“... 0702 *”'...等。否则,您可能需要使用xargs或类似命令分别删除它们 – Jedi

+0

@Jedi是的,我只需要做一次。因此,如果我想要在7月4日删除所有内容,我只需从20170704 *开始,并且通配符将关注“04”之后的所有内容。 –

+1

是的。您可以使用'ls'而不是'rm'来执行干运行。你会[需要双引号](https://stackoverflow.com/a/32738462)。 – Jedi

回答

2

我猜上述评论会解决你的问题,你可以在下面尝试的情况下,

/hdfs path/pr_load_time={20170701000317,20170704133602,20170705000317,..} 

或像这样

/hdfs path/pr_load_time=201707{01000317,04133602,05000317,..} 

这可以在单一命令中组合不同的模式

/hdfs path/pr_load_time = 201707 {01 *,04 *,05 *,..}

相关问题