在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