在Linux文件系统中,我们可以使用下面的Shell脚本判断某个文件是否存在:
| # 这里的-f参数判断$file是否存在 if [ ! -f "$file" ]; then echo "文件不存在!" fi |
但是我们想判断HDFS上某个文件是否存在咋办呢?别急,Hadoop内置提供了判断某个文件是否存在的命令:
| [iteblog@www.iteblog.com ~]$ hadoop fs -help ...... -test -[defsz] <path>:Answer various questions about <path>, with result via exit status. -d return 0 if <path> is a directory. -e return 0 if <path> exists. -f return 0 if <path> is a file. -s return 0 if file <path> is greater than zero bytes in size. -z return 0 if file <path> is zero bytes in size. else, return 1. ...... |
从上面的输出可以看出,我们可以使用test命令来判断某个文件是否存在。如果文件存在,这个命令将返回0;反之则返回1。
| [iteblog@www.iteblog.com ~]$ hadoop fs -test -e /path/not/exist [iteblog@www.iteblog.com ~]$ echo $? 1 [iteblog@www.iteblog.com ~]$ hadoop fs -test -e /path/exist [iteblog@www.iteblog.com ~]$ echo $? 0 |
所以我们可以在Shell里面判断HDFS上某个文件是否存在:
| hadoop fs -test -e /path/exist if [ $? -eq 0 ] ;then echo 'exist' else echo 'Error! path is not exist' fi |
test命令还可以判断某个文件是否是文件夹、是否是文件、某个文件大小是否大于0或者等于0。
| hadoop fs -test -d /path/exist if [ $? -eq 0 ] ;then echo 'Is a directory' else echo 'Is not a directory' fi hadoop fs -test -f /path/exist if [ $? -eq 0 ] ;then echo 'Is a file' else echo 'Is not a file' fi hadoop fs -test -s /path/exist if [ $? -eq 0 ] ;then echo 'Is greater than zero bytes in size' else echo 'Is not greater than zero bytes in size' fi hadoop fs -test -z /path/exist if [ $? -eq 0 ] ;then echo 'Is zero bytes in size.' else echo 'Is not zero bytes in size. ' fi |
备注:本文转载自过往记忆(https://www.iteblog.com/)
本文原链接: 【在shell中如何判断HDFS中的文件目录是否存在】(https://www.iteblog.com/archives/1607.html)