我一直试图找到解决这个问题的方法。我发现在使用shell的普通文件系统中,您可以使用此命令移动某个位置下的所有文件,但只保留目录。
find . -maxdepth 1 -type f -exec mv {} destination_path \;
我想知道是否还有一个命令可以在hdfs中执行相同操作。
所以,如果我在hdfs中有一个名为" folder1"的文件夹。其中包含文件" copyThis.txt"," copyThisAsWell.txt"和" theFinalCopy.txt"并且还包含一个文件夹" doNotCopy"我想将文件复制到名为" folder2"的新文件夹中。但保留文件夹" doNotCopy"如何在hdfs中完成?
感谢您提供的任何帮助。
答案 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