時間ごとのクローン操作で、新しい音楽を私のシードボックスからローカルサーバーに移動したいと思います。ローカルコンピュータで同期が完了すると、私のローカルミュージックはmusicbrainzスクリプトによって新しいフォルダに移動されます。つまり、次の同期操作では、シードボックスの新しいファイルのみを同期し、ローカルサーバーから削除されたファイルを無視するだけです。 。どちらのマシンもLinuxです。
現在の回避策は、rsync --exclude-fromフラグを使用して同期ログファイルを読み込み、rsyncを追加することです。ほとんど成功しましたが、特定の文字のためにいくつかのディレクトリとファイルが一致しないため、再同期が発生するようです。 UTF-8の問題かもしれないので、env LC_ALL = en_US.UTF-8 rsync ...とさまざまな--iconv設定を追加してみましたが、まだ安定した同期を得ることはできません。ここに私のスクリプトがあります。 :
echo "Rsync My Artists"
#
rsync -vrz \
--exclude-from=/mnt/user/sync/music-myartists/__sync-log \
-e ssh \
[email protected]:/home37/xxxx/downloads/deluge-filters/my-artists/ /mnt/user/sync/music-myartists/ \
| grep -v ^sending \
| grep -v ^sent \
| grep -v ^total \
| grep -v 'receiving incremental file list' \
>> /mnt/user/sync/music-myartists/__sync-log
#
echo "Beets Moving My Artists"
#
docker exec beets beet -c /config/config-move-quiet.yaml import /sync/music-myartists
#
find /mnt/user/sync/music-myartists/ -not -name '__sync-log' -delete
################################
以下は、同じ内容で__sync-logファイルを再構築する例です。https://pastebin.com/FMSfwUU8
どんなアイデアがありますか?
答え1
さて、解決しました。 utf-8とは無関係で、むしろrsyncsで3つのワイルドカードのうちの1つをトリガーするファイル名'*', '?', and '['
。これ'? ' と '*' は問題を起こしませんが、 '[' は [az] や [[:alpha:]] などの文字クラスを導入して不一致を引き起こします。
rsyncsの進捗状況を記録した後、以下を追加しました。
sed -i 's/\[/\*/g' /mnt/user/sync/music-manual/__sync-log
「[」を「*」に交換
これをrsyncコマンドに含める賢い方法はありますか?