如何在使用 `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 分隔的字符串。
我想从 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 分隔的字符串。