最新のファイルを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 それが適用される唯一のものです。)
Scott

次の質問に対するbolDの回答は、あなたの興味を引くかもしれません。 宛先の既存ファイルの置き換えなしのscp
PetaspeedBeaver

回答:


1

やってみました rsync

rsyncは高速の増分ファイル転送を提供するオープンソースのユーティリティです。

変更されたファイルや新しいファイルのみが転送され、変更されたファイルの差分だけが転送されます。それはまた他の様々な 気の利いた機能

これはあなたのコードの問題を実際に解決するものではありませんが、rsyncはSFTPで車輪の再発明を試みるよりも簡単になると思います。


いや、私の要求によれば、私はどんなツールも使う必要はない。私はスクリプトを通してそれをする必要があります。
Maddy

0

Rsync(またはUnison)が最高です

他の解決策は find

 find . -name 'mad_*' -newer last_update -exec sftp ... {} \;
 touch last_update
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.