使用shell脚本查找HDFS中是否存在文件

7 linux bash shell hadoop hdfs

我有一个shell script像下面.此脚本打印位于其中的文件的路径HDFS

#!/bin/bash

TIMESTAMP=`date "+%Y-%m-%d"`
path=/user/$USER/logs/${TIMESTAMP}.fail_log
path1=/user/$USER/logs/`date -d "-1 days" '+%Y-%m-%d'`.fail_log

echo filePath=$path
echo filePath1=$path1
Run Code Online (Sandbox Code Playgroud)

在脚本中paths提供的是hdfs位置

在这个脚本中我得到了文件路径.

现在我想知道文件是否确实存在HDFS.

如果文件存在,则只打印文件路径,否则什么都不做.

我怎样才能做到这一点?

Amb*_*ish 20

您可以尝试-test选项来实现相同的目标.

例如

hdfs dfs -test -[defszrw] HDFS_PATH
Run Code Online (Sandbox Code Playgroud)
  • -d:检查文件或目录是否存在
  • -e:检查文件或目录是否为空
  • -f:检查给定-s是否是目录.

例:

if hdfs dfs -test -e $HDFS_PATH; then
    echo "[$HDFS_PATH] exists on HDFS"
    hdfs dfs -ls $HDFS_PATH
fi
Run Code Online (Sandbox Code Playgroud)

参考:https://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/FileSystemShell.html#test

  • 你测试过代码吗?因为我只能使用 `echo $?` 并将其与 0 进行比较来获得该值。 (2认同)