我想通过每小时的 cron 作业将新音乐从我的种子箱移动到我的本地服务器。一旦在本地计算机上完成同步,我的本地音乐就会被 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 三个通配符之一'*', '?', and '['
。这 '?'和 '*' 不会引起问题,但是 '[' 引入了字符类,例如 [az] 或 [[:alpha:]],这会导致不匹配。
将 rsyncs 进度写入日志后,我添加了:
sed -i 's/\[/\*/g' /mnt/user/sync/music-manual/__sync-log
将“[”替换为“*”
有没有一种巧妙的方法将其包含在 rsync 命令中?