2017-08-06 150 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 *,..}