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

问题描述 投票:0回答:2

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

是否有任何方式/命令来复制文件而不是目录?

hdfs hadoop2
2个回答
2
投票

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

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

哪里,

  • hdfs dfs -ls <HDFS_DIR_PATH>用于列出所有文件和目录
  • grep "^-"用于排除目录
  • awk 'BEGIN{FL=""} {FL=FL" "$8}用于创建仅包含文件路径的字符串
  • END{system("hdfs dfs -copyToLocal "FL" .")}'用于复制文件路径列表

请注意,在最后一个命令中,您可以使用任何本地文件系统路径,而不是.


0
投票

@ daemon12的答案的变体实现了同样的事情。

hadoop fs -ls <HDFS_DIR_PATH> | grep "^-" | \
awk '{print $8'} | hadoop fs -copyToLocal $(xargs) .
  • awk '{print $8'}用于从ls输出中获取实际路径列。
  • $(xargs)用于将路径连接成空格分隔的字符串。
© www.soinside.com 2019 - 2024. All rights reserved.