【发布时间】:2023-10-09 00:50:01
【问题描述】:
我需要编写一个脚本来将内容从远程服务器复制到本地计算机。尽管有很多方法可以做到这一点,因为服务器属于不同的集群(一个是 kerborized 另一个不是),我的同事建议使用简单的 bash 脚本将数据从远程位置流式传输到本地计算机(它所在的位置)流式传输到 hdfs put 命令以将其存储在本地集群上)。
以下代码适用于第一次迭代,创建一个目录、一个正确命名的文件并向其中添加正确的内容。但是它在第一个文件之后停止(在这个测试场景中,有三个文件名为 a、b 和 c,并且文件 a 在目标服务器中成功创建,内容正确,但文件 b 和 c 不是。
谁能帮助理解这个脚本出了什么问题?我认为这个问题与我的 bash 语法有关,而不是它背后更复杂的 hdfs 的问题。
这是脚本:
lastIterationDir=""
ssh -i <private_key> <user>@<source_ip> "hdfs dfs -ls -R <sourceDr>" |
awk ' $0 !~ /^d/ {print $NF}' |
while read fileToTransfer
do
thisIterationDir=`dirname $fileToTransfer}`
if [ "$thisIterationDir" != "$lastIterationDir" -a "$thisIterationDir" != "/" ]; then
hdfs dfs -mkdir -p "/path/to/save/transfered/files${thisIterationDir}"
fi
ssh -i <private_key> <user>@<source_ip> "hdfs dfs -cat ${fileToTransfer}" |
hdfs dfs -put - "${destinationFolder}${fileToTransfer}"
lastIterationDir=$thisIterationDir
done
【问题讨论】:
标签: bash while-loop iteration