我想从HDFS复制文件。我希望在复制文件时排除文件夹。我尝试了hdfs dfs -copyToLocal
,但它也在我测试时复制了目录。
是否有任何方法/命令来复制文件而不是目录?
答案 0 :(得分: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" .")}'
用于复制文件路径列表
请注意,在最后一个命令中,您可以使用任何本地文件系统路径而不是.
。
答案 1 :(得分:0)
@ daemon12答案的变体,可以实现相同的目的。
hadoop fs -ls <HDFS_DIR_PATH> | grep "^-" | \
awk '{print $8'} | hadoop fs -copyToLocal $(xargs) .
awk '{print $8'}
用于从ls
输出中获取实际路径列。$(xargs)
用于将路径的行连接到以空格分隔的字符串中。