复制hadoop目录中除1之外的所有文件

时间:2015-04-29 11:14:45

标签: shell unix hadoop hdfs

我正在编写一个shell脚本,将所有文件放在hadoop目录中。

我使用了命令:

hadoop dfs -put /opt/nikoo28/resources/conf ./

现在,这会复制我的hadoop主目录中的文件夹conf,覆盖所有内容。

但是,有一个文件,“doNotCopy.txt”,我不想复制。是否有一些方法可以跳过特定文件?

3 个答案:

答案 0 :(得分:1)

我在Apache Hadoop docs #put中看到了:

  

用法:hadoop fs -put ...

     

将单个src或多个srcs从本地文件系统复制到   目标文件系统。还从stdin读取输入并写入   目标文件系统。

然后是一个有用的例子

  

hadoop fs -put - hdfs://nn.example.com/hadoop/hadoopfile阅读   来自stdin的输入。

所以也许您可以使用find表达式来覆盖此文件,然后导管到hadoop

find /opt/nikoo28/resources/conf ! -name "doNotCopy.txt" | hadoop dfs -put - ./

答案 1 :(得分:0)

在shell脚本中添加以下行:

mkdir /opt/copy
mv /opt/nikoo28/doNotCopy.txt /opt/copy/doNotCopy.txt
hadoop dfs -put /opt/nikoo28/resources/conf ./ && mv /opt/copy/doNotCopy.txt /opt/nikoo28/doNotCopy.txt

只需移动您不想复制到其他文件夹的文件即可。执行 hadoop fs -put 命令。现在,将文件移回原位。

如果您想保留文件权限,请执行以下操作:

mkdir /opt/copy
cp -p /opt/nikoo28/doNotCopy.txt /opt/copy/doNotCopy.txt
rm /opt/nikoo28/doNotCopy.txt
hadoop dfs -put /opt/nikoo28/resources/conf ./ && cp -p /opt/copy/doNotCopy.txt /opt/nikoo28/doNotCopy.txt
  

注意:如果在创建目录,移动文件或复制文件时遇到权限错误,请添加 sudo

答案 2 :(得分:0)

这有点奇怪,但应该有效:

file=./conf/doNotCopy.txt
[[ -f $file ]] && mv $file $file.old
hadoop dfs -put /opt/nikoo28/resources/conf ./
rm $file
[[ -f $file ]] && mv $file.old $file