【问题标题】:How do you move files but not the directories in hdfs?你如何移动文件而不是hdfs中的目录?
【发布时间】:2016-05-13 00:09:01
【问题描述】:

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

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

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

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

感谢您提供的任何帮助。

【问题讨论】:

  • 据我所知,到目前为止,hdfs 中还没有类似的命令可以执行此操作。我可以建议使用 hadoop fs -cp *.txt folder2/ 以便您可以复制所有 *.txt 文件而省略文件夹

标签: shell hadoop directory hdfs


【解决方案1】:

没有直接的 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 选项一样指定深度,这将不起作用。

【讨论】:

    【解决方案2】:

    使用 xargs: hdfs dfs -ls 文件夹1 | grep "^-" | awk '{打印 $8}' | xargs -n 1 -P 2 -I % hdfs dfs -mv % folder2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 2017-05-10
      • 1970-01-01
      • 2021-10-23
      相关资源
      最近更新 更多