shell - 你如何移动文件而不是 hdfs 中的目录?

标签 shell hadoop directory hdfs

一段时间以来,我一直在努力寻找解决这个问题的方法。我发现在使用 shell 的普通文件系统中,您可以使用此命令将所有文件移动到某个位置下,但保留目录不变。

    find . -maxdepth 1 -type f -exec mv {} destination_path \;

我想知道是否还有一个命令可以在 hdfs 中执行相同的操作。

因此,如果我在 hdfs 中有一个名为“folder1”的文件夹,其中包含文件“copyThis.txt”、“copyThisAsWell.txt”和“theFinalCopy.txt”,还包含一个文件夹“doNotCopy”,我想复制将文件放入名为“folder2”的新文件夹中,但将文件夹“doNotCopy”留在后面,这如何在 hdfs 中完成?

感谢您提供的任何帮助。

最佳答案

没有直接的 hdfs 命令可以实现这一点。但是您仍然可以通过结合使用 unix 和 hdfs 命令来完成。像这样:

hdfs dfs -ls folder1 | grep "^-" | awk '{print $8}' | awk '{system("hdfs dfs -cp "$0" folder2")}'

解释:

hdfs dfs -ls folder1 : 列出父目录(非递归)

grep "^-" : 从列表中排除目录

awk '{print $8}' : 只打印要复制的文件名

awk '{system("hdfs dfs -cp "$0"folder2")}' : 用刚刚获取的文件名执行 hdfs 命令

注意:这只是一种变通方法,如果您想像 find 命令的 -maxdepth 选项那样指定深度,则不会起作用。

关于shell - 你如何移动文件而不是 hdfs 中的目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35183085/

相关文章:

directory - 在 Winmerge 中,如何单独比较文件夹结构(无文件比较)?

directory - 如何定义我的脚本标签来处理虚拟目录?

linux - bash 中是否有 "goto"语句?

linux - Shell 文件解析以自动上传 youtube

bash - 将多个命令的输出重定向到一个文件

hadoop - 访问 hdfs 文件夹

hadoop - 使用命令行(CDH 5)启动Hadoop服务

apache-spark - Spark作业可在两个不同的HDFS环境中工作

linux - find -exec 中的命令替换

安卓 : Monitoring folder activity