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