在HDFS目录中查找avro文件时获得错误的结果

时间:2017-04-25 09:43:19

标签: linux hdfs

我想检查一下HDFS位置内是否有一个或多个avro文件

[cloudera@client01 scripts]$ hdfs dfs -ls /user/cloudera/output_files/file_date_2017-04-05

Found 11 items
-rw-rw----   2 cloudera cloudera          0 2017-04-24 13:57 /user/cloudera/output_files/file_date_2017-04-05/_SUCCESS
-rw-rw----   2 cloudera cloudera     781714 2017-04-24 13:56 /user/cloudera/output_files/file_date_2017-04-05/part-r-00000-7e1d4e4e-9166-4744-b73b-095a7cc0e090.avro
-rw-rw----   2 cloudera cloudera     782132 2017-04-24 13:56 /user/cloudera/output_files/file_date_2017-04-05/part-r-00001-7e1d4e4e-9166-4744-b73b-095a7cc0e090.avro
-rw-rw----   2 cloudera cloudera     782467 2017-04-24 13:56 /user/cloudera/output_files/file_date_2017-04-05/part-r-00002-7e1d4e4e-9166-4744-b73b-095a7cc0e090.avro
-rw-rw----   2 cloudera cloudera     785117 2017-04-24 13:56 /user/cloudera/output_files/file_date_2017-04-05/part-r-00003-7e1d4e4e-9166-4744-b73b-095a7cc0e090.avro

但是当我应用下面的hdfs命令时,我什么都没得到。

[cloudera@client01 scripts]$  hdfs dfs -ls /user/cloudera/output_files/file_date_2017-04-05/* | grep "part*.avro"
[cloudera@client01 scripts]$ echo $?
1
[cloudera@client01 scripts]$  hdfs dfs -ls /user/cloudera/output_files/file_date_2017-04-05/ | grep "part*.avro"
[cloudera@client01 scripts]$ echo $?
1

我希望打印0,因为HDFS位置内有许多avro文件。

有人可以帮我解决上面这个命令出了什么问题

1 个答案:

答案 0 :(得分:1)

在这里,您需要.*来匹配grep中文件名模式之间的零个或多个字符。

hdfs dfs -ls /user/cloudera/output_files/file_date_2017-04-05/ | grep "part.*\.avro"

或者,如果只需要退出代码,则可以使用-test

hdfs dfs -test -e /user/cloudera/output_files/file_date_2017-04-05/part*.avro
echo $?
0