rsync
私は長い間使用していますが、必要に応じて完璧に動作しますが、ターゲットサーバーファイルが数秒ごとに移動され、rsync
同じファイルがローカルのSFTPサーバーから再コピーされるという状況に直面しました。コマンドを使用していますが、--ignore-existing
この場合でも機能しません。
sshpass -p "ABCDE" rsync -avvtzh --ignore-existing -e "ssh -o StrictHostKeyChecking=no" --log-file="/home/toor/log/uc.log" [email protected]:share/CACHEDEV1_DATA/Lanein1/Unicard/ /home/toor/UCDownloads/
ベストアンサー1
ターゲットファイルが移動された場合、そのrsync
ファイルはもう存在しません。この--ignore-existing
フラグは、ファイルが期待どおりに存在しないため、役に立たないので無視することはありません。
フラグファイルを生成し、rsync
最後の成功した実行以降に変更されたファイルのみをプッシュできます。このようなスケルトンは機能します(ファイルソースがローカルではなくリモートシステムにあるため、思ったよりも複雑です)。
path='/share/CACHEDEV1_DATA/Lanein1/Unicard'
flag="$path.flag"
# Must have a flag file. If we don't then create one from the epoch
if ssh -nq [email protected] "[ ! -f '$flag' ]"
then
touch -t 197001010000 /tmp/1970
scp -p /tmp/1970.flag [email protected]:"$flag"
rm -f /tmp/1970.flag
fi
# Flag the start of the synchronisation
ssh -nq [email protected] "date >'$flag.tmp'"
# Copy files newer than the flag
if ssh -nq [email protected] "find '$path/' -depth -newer '$flag' -print0 |
rsync -avz --files-from - --from0 [email protected]:/ /home/toor/UCDownloads/
then
# Install the new flag
ssh -nq [email protected] "mv -f '$flag.tmp' '$flag'"
fi
QNAPに慣れていない人のために説明すると、このtouch
コマンドは標準では存在せず、rsync
その機能は縮小されました。私はこれをローカルクライアントで使用して日付がtouch
1970-01-01のファイルを作成し、それを初期フラグとしてリモートシステムに送信しました。 (touch
リモートシステムに存在する場合は、最初にリモートからファイルを作成する方がはるかに簡単になります。)表示されたfind
日以降に作成/変更されたファイルとディレクトリのみが含まれます。