如何在使用 `copyToLocal` 时排除目录

How to exclude directories while using `copyToLocal`

我想从 HDFS 复制文件。我希望在复制文件时排除文件夹。我试过 hdfs dfs -copyToLocal 但它也会在我测试时复制目录。

有没有way/command只复制文件不复制目录的?

据我所知, -copyToLocal 没有直接标志只复制文件。但是您可以使用 linux grep 从您正在复制的数据中排除目录。像这样:

hdfs dfs -ls <HDFS_DIR_PATH> | grep "^-" | awk 'BEGIN{FL=""} {FL=FL" "} END{system("hdfs dfs -copyToLocal "FL" .")}'

其中,

  • hdfs dfs -ls <HDFS_DIR_PATH>用于列出所有文件和目录

  • grep "^-"用于排除目录

  • awk 'BEGIN{FL=""} {FL=FL" "} 用于创建仅包含文件路径的字符串

  • END{system("hdfs dfs -copyToLocal "FL" .")}'用于复制文件路径列表

请注意,您可以使用任何本地文件系统路径代替最后一个命令中的 .

@daemon12 的答案的一个变体,实现了同样的效果。

hadoop fs -ls <HDFS_DIR_PATH> | grep "^-" | \
awk '{print '} | hadoop fs -copyToLocal $(xargs) .
  • awk '{print '}用于从ls输出中获取实际路径列。
  • $(xargs) 用于将路径行连接成 space 分隔的字符串。