Shell中判断HDFS中的文件或目录是否存在

在Linux文件系统中,Shell脚本判断某个文件是否存在:

# 这里的-f参数判断$file是否存在 
if [ ! -f "$file" ]; then
  echo "文件不存在!"
fi

Hadoop提供了test命令判断HDFS上某个文件或目录是否存在:

[root@node00 ~]# hdfs dfs -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。

[root@node00 ~]# hdfs dfs -test -e /path/not/exist
[root@node00 ~]# echo $?
1
[root@node00 ~]# hdfs dfs -test -e /path/exist
[root@node00 ~]# echo $?
0
[root@node00 ~]# 

那么我们可以在Shell脚本里面判断HDFS上某个文件是否存在

#!/bin/bash
hdfs dfs -test -e /path/exist
if [ $? -eq 0 ] ;then 
    echo 'exist' 
else 
    echo 'Error! NO Such File Or Directory !' 
fi
...

test 命令还可以判断:

  1. -d某个路径是否是文件夹( -d);
  2. -f某个路径是否是文件( -f);
  3. -s某个文件大小是否大于0;
  4. -z某个文件大小等于0
#!/bin/bash

#判断是否是文件夹
hdfs dfs -test -d /path/exist
if [ $? -eq 0 ] ;then 
    echo 'Is a directory' 
else 
    echo 'Is not a directory' 
fi

#判断是否是文件
hdfs dfs -test -f /path/exist
if [ $? -eq 0 ] ;then 
    echo 'Is a file' 
else 
    echo 'Is not a file' 
fi

#判断文件大小是否大于0
hdfs dfs -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
 
#判断文件大小是否等于0
hdfs dfs -test -z /path/exist
if [ $? -eq 0 ] ;then 
    echo 'Is zero bytes in size.' 
else 
    echo 'Is not zero bytes in size. '
fi
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
循环是在编程常用的一种结构,可以重复执行一段代码块。在Shell脚本,可以使用循环来处理HDFS文件目录。 下面是一个示例,展示了如何使用Shell脚本的循环来遍历HDFS文件目录: ```shell #!/bin/sh # 遍历HDFS文件 hdfs dfs -ls /path/to/files | while read -r line; do filename=$(echo $line | awk '{print $NF}') echo "处理文件: $filename" # 在这里可以添加具体的文件处理逻辑 done # 遍历HDFS目录 hdfs dfs -ls /path/to/directories | grep '^d' | while read -r line; do dirname=$(echo $line | awk '{print $NF}') echo "处理目录: $dirname" # 在这里可以添加具体的目录处理逻辑 done ``` 上述示例,`hdfs dfs -ls`命令用于列出HDFS文件目录。通过管道和`while`循环,可以逐行读取输出,并对每个文件目录进行处理。在循环体内,可以根据需要添加具体的文件目录处理逻辑。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【Shell-HDFS】使用Shell脚本判断HDFS文件目录是否存在](https://blog.csdn.net/weixin_53543905/article/details/130237460)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值