在shell中如何判断HDFS中的文件目录是否存在

在Linux文件系统中,我们可以使用下面的Shell脚本判断某个文件是否存在:

# 这里的-f参数判断$file是否存在

if [ ! -f "$file" ]; then

  echo "文件不存在!"

fi

但是我们想判断HDFS上某个文件是否存在咋办呢?别急,Hadoop内置提供了判断某个文件是否存在的命令:

[[email protected] ~]$ hadoop fs -help

......

-test -[defsz] :Answer various questions about , with result via exit status.

          -d  return 0 if is a directory.

          -e  return 0 if exists.

          -f  return 0 if is a file.

          -s  return 0 if file is greater than zero bytes in size.

          -z  return 0 if file is zero bytes in size.

        else, return 1.

......

从上面的输出可以看出,我们可以使用test命令来判断某个文件是否存在。如果文件存在,这个命令将返回0;反之则返回1。

[[email protected] ~]$ hadoop fs -test -e /path/not/exist

[[email protected] ~]$ echo $?

1

 

[[email protected] ~]$ hadoop fs -test -e /path/exist

[[email protected] ~]$ 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

你可能感兴趣的:(shell编程)