시간별 크론 작업을 통해 새 음악을 내 시드박스에서 로컬 서버로 옮기고 싶습니다. 로컬 컴퓨터에서 동기화가 완료되면 내 로컬 음악은 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 명령에 포함시키는 영리한 방법이 있습니까?