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

时间:2016-02-03 16:55:34

标签: 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中完成?

感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:2)

没有直接的hdfs命令来实现这一目标。但是你仍然可以通过使用unix和amp;组合来实现它。 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命令

注意:这只是一种解决方法,如果您想指定-maxdepth命令find选项的深度,则无法使用。

答案 1 :(得分:1)

使用xargs: hdfs dfs -ls folder1 | grep&#34; ^ - &#34; | awk&#39; {print $ 8}&#39; | xargs -n 1 -P 2 -I%hdfs dfs -mv%folder2