如何从Unix服务器获取最新文件到另一台Unix服务器?


1

如何从Unix服务器到另一台Unix服务器获取最新的文件?

我已通过SFTP连接到服务器2并尝试应用for循环来检查时间戳,这不起作用:

sftp $SERVER2  << !EOF
cd $Server2_FILE_LOCATION
echo Pwd File location: $pwd

LastUpdatedTS=$(grep "value of TimeStamp is" /root/airtelSnD/BoTreeScript/BotreeLastFileTS.txt | cut -d'=' -f2)

echo 1

for file in mad_*.*
do
CurrentFileTS=$(stat -c %Y $file |awk '{print  strftime( "%Y%m%d%H%M%S", $1 )}')

echo 2

echo TS of last updated file is : $LastUpdatedTS
echo value CurrentFileTS is $CurrentFileTS

echo 3

if [[ $CurrentFileTS -gt $LastUpdatedTS ]]
 then
    echo if......
    mget  $file $DESTINATION_SERVER
    echo value of TimeStamp is=$CurrentFileTS > $LASTFILE_TS    
else
    echo else...       
 fi
done

quit
!EOF

我同意发布的答案,您应该使用专门用于执行此任务的工具。但是,如果你想知道如何让脚本像这样的工作,可以尝试在一个反斜杠除了正在使用从值的那些所有的美元符号的符号之前sftp的环境。(它看起来像$Server2_FILE_LOCATION$DESTINATION_SERVER对其中适用唯一的。)
斯科特

bolD对以下问题的回答可能会让你感兴趣:scp-without-
replacement

Answers:


1

你试过rsync吗?

rsync是一个开源实用程序,提供快速增量文件传输。

它只会传输更改的/新文件,并且只传输已更改文件的增量。它还有其他各种漂亮的功能

这并没有真正解决您的代码的任何问题,但我认为rsync比尝试使用SFTP重新发明轮子更容易。


不,根据我的要求,我不必使用任何工具。我只需要通过脚本来完成它。
Maddy

0

Rsync(或Unison)是最好的

另一种解决方案是使用 find

 find . -name 'mad_*' -newer last_update -exec sftp ... {} \;
 touch last_update
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.