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

2 ответа2

1

Вы пробовали rsync?

rsync - это утилита с открытым исходным кодом, которая обеспечивает быструю пошаговую передачу файлов.

Он будет передавать только измененные / новые файлы и только дельты для измененных файлов. У этого также есть различные другие изящные особенности.

Это на самом деле не решает никаких проблем с вашим кодом, но я думаю, что rsync будет проще, чем пытаться заново изобрести колесо с SFTP.

0

Rsync (или Unison) лучше

Другое решение было бы использовать find

 find . -name 'mad_*' -newer last_update -exec sftp ... {} \;
 touch last_update

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .