我正在编写一个shell脚本,将所有文件放在hadoop目录中。
我使用了命令:
hadoop dfs -put /opt/nikoo28/resources/conf ./
现在,这会复制我的hadoop主目录中的文件夹conf,覆盖所有内容。
但是,有一个文件,“doNotCopy.txt”,我不想复制。是否有一些方法可以跳过特定文件?
答案 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