没有办法在单个命令中执行此操作
hdfs dfs -rm {destination Uri}; hdfs dfs -mv {source Uri} {destination Uri}
将在一条线上实现这一目标。
不是一个命令而是一个变通方法:
为了合并HDFS中的文件夹,我实现了一个解决方案,因为cp与数据节点上的物理数据交互,而mv只更改名称节点上的元数据。
for i in $(hdfs dfs -ls -R ${hdfs_src_dir} | grep "^-" | awk '{print $8}'); do i_dir=$(dirname "${i}") target_dir=${hdfs_tgt_dir}${i_dir#"$hdfs_src_dir"} hdfs dfs -mkdir -p $target_dir hdfs dfs -mv ${i} "${target_dir}"/ 2>&1 done
第一行以递归方式选择目标中的所有文件。然后创建目标中每个文件的路径,最后移动文件。
缺点是文件夹访问权限不会移动,而是在运行时设置。