我在日期范围内运行了一堆m / r报告,现在有一系列目录,如:
/user/michael/output/TrueListingSellThroughFromLeafCategory/{20120101,20120102,20120103,20120104,20120105,20120106,20120107}
/user/michael/output/TrueListingSellThroughFromLeafCategory/{20120108,20120109,20120110,20120111,20120112,20120113,20120114}
/user/michael/output/TrueListingSellThroughFromLeafCategory/{20120115,20120116,20120117,20120118,20120119,20120120,20120121}
我在浏览这些目录时遇到了很多困难。如果我尝试ls
其中一个,它会将日期作为列表,并为每个目录查找不同的目录。如果我逃避括号,我得到一个没有这样的文件或目录错误。如果我用%7B和%7D替换大括号,它会类似。
如果我通过该级别的通配符,那么我可以浏览更低级别:
/user/michael/output/TrueListingSellThroughFromLeafCategory/*
但一次检索一个就好了!我怎么能这样做?
答案 0 :(得分:5)
看起来你应该能够使用正则表达式运算符?
hadoop fs -ls /user/michael/output/TrueListingSellThroughFromLeafCategory/?20120101,20120102,20120103,20120104,20120105,20120106,20120107?
我在我的盒子上测试过它似乎有效:
[cmenguy@localhost ~]$ hadoop fs -mkdir /tmp/{TEST}
[cmenguy@localhost ~]$ hadoop fs -put <(echo foo) /tmp/{TEST}/
[cmenguy@localhost ~]$ hadoop fs -ls /tmp/{TEST}
ls: Cannot access /tmp/{TEST}: No such file or directory.
[cmenguy@localhost ~]$ hadoop fs -ls '/tmp/\{TEST\}'
ls: Illegal file pattern: Expecting set closure character or end of range, or } for glob {TEST at 5
[cmenguy@localhost ~]$ hadoop fs -ls /tmp/?TEST?
Found 1 items
-rw-r--r-- 3 cmenguy supergroup 4 2013-01-24 05:59 /tmp/{TEST}/63
看起来这仍然在进行中,如HDFS-3557中所述,它似乎特定于0.20.2(如果您使用Cloudera,这仍会影响cdh3u *版本,因此您可能需要使用CDH4)