一段时间以来,我一直在努力寻找解决这个问题的方法。我发现在使用 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/