我必须使用Unix遍历目录中的所有文件,并找出从时间范围创建的文件。这是我正在尝试的命令。但不知何故,它确实列出了目录中的所有文件。
`hadoop fs -ls $ a $ slash $ star | awk' $ 6FS $ 7> =" 2014-12-11 09:00" &安培;&安培; $ 6FS $ 7< =" 2014-12-12 09:00"''
这里$a
是变量,我提到了目录名。
$ slash有/
$ start has *
任何人都可以帮我吗?
答案 0 :(得分:1)
我不知道" hadoop fs ......"命令包括任何直接的通配(即,*可能不起作用)。
您可以尝试改为:
hadoop fs -ls -R /your/dir/path
这应显示 / your / dir / path 下的文件列表。然后你可以看看你使用awk的过滤是否有效(我没看过)。
编辑:
在我可以访问的小型集群中,它包含HDFS中的几千个文件,我可以运行:
$ hadoop fs -ls -R / | awk '$6FS$7 > "2014-07-18 15:30" && $6FS$7 < "2014-07-19 22:00"'
drwxr-xr-x - hadoop supergroup 0 2014-07-18 15:33 /testlog/blah.txt
-rw-r--r-- 2 hadoop supergroup 0 2014-07-18 15:33 /testlog/blah.txt/_SUCCESS
-rw-r--r-- 2 hadoop supergroup 5311539 2014-07-18 15:33 /testlog/blah.txt/part-00000
-rw-r--r-- 2 hadoop supergroup 4400434 2014-07-18 15:33 /testlog/blah.txt/part-00001
过滤和输出类似于您之后的功能,假设我理解您的问题。
注意 -R 选项,并使用一个简单的斜杠字符(&#34; /&#34;)作为最终参数,而不是/ your / dir / path:doing &#34; fs -ls -R /&#34;列出HDFS中的所有文件。我还在 awk 表达式中使用了不同的比较运算符,但这更容易将结果限制在此集群的HDFS内容中的某些非描述文件中。