使用Unix循环遍历目录及其子目录中的所有文件

时间:2014-12-15 00:20:04

标签: unix hadoop

我必须使用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 *

任何人都可以帮我吗?

1 个答案:

答案 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内容中的某些非描述文件中。