在路径中检索具有特殊字符的文件时遇到麻烦

时间:2013-01-24 04:53:29

标签: hadoop hdfs

我在日期范围内运行了一堆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/*

但一次检索一个就好了!我怎么能这样做?

1 个答案:

答案 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)