rsync с двоеточиями в именах файлов

rsync с двоеточиями в именах файлов

У меня есть довольно большой каталог, который мне нужно синхронизировать с внешним жестким диском как для резервного копирования, так и для портативности.

/work

Я пытаюсь выполнить следующую команду rsync, чтобы скопировать эту папку на внешний жесткий диск:

rsync -avz /work /media/extern_drive --max-size '4G'

Кажется, все работает нормально, ЗА ИСКЛЮЧЕНИЕМ того, что не копируются файлы, содержащие :.

В этом посте дано решение для одного файла: rsync: двоеточие в именах файлов, но проблема в том, что у меня так много этих файлов, разбросанных по разным каталогам, что я не могу сделать это вручную.

Есть ли способ рекурсивно синхронизировать файлы, в имени которых есть двоеточие?

решение1

Я предполагаю, что ваш внешний диск использует файловую систему, например VFAT, которая не допускает двоеточия в именах файлов.

Простым вариантом будет резервное копирование файлов в виде архивов ( zip, 7z, tar.xz, что вам больше нравится). Таким образом, вы не будете ограничены никакими характеристиками файловой системы, кроме максимального размера файла.

Другой возможностью было бы использованиеrdiff-резервное копирование, который занимается переводом имен файлов, которые не помещаются в целевой файловой системе, какпредложенныйкпулли.

Общий подход к неподдерживаемым символам заключается в использовании уровня файловой системы для преобразования имен файлов.ПРЕДОХРАНИТЕЛЬфайловая системаposixovlпреобразует имена файлов в имена, поддерживаемые VFAT Windows.

mkdir ~/mnt
mount.posixovl -S /media/extern_drive ~/mnt
rsync -a /work ~/mnt
fusermount -u ~/mnt

ВидетьКак заменить двоеточия при rsync на USB-накопителе?для получения более подробной информации и проверьте эту ветку на предмет появления новых решений.

решение2

Я бы попробовал явно включить шаблон файлов с двоеточиями в именах, например так:

$ rsync -avz --include '*:*' /work /media/extern_drive --max-size '4G'

Примеры

$ mkdir 1 2
$ touch 1/file{1..5}
$ touch 1/file:{1..5}
Явно исключая их
$ rsync -avz --exclude '*:*' 1/ 2/
sending incremental file list
./
file1
file2
file3
file4
file5

sent 313 bytes  received 114 bytes  854.00 bytes/sec
total size is 0  speedup is 0.00
Явно включая их
$ rm -fr 2/*

$ rsync -avz --include '*:*' 1/ 2/
sending incremental file list
./
file1
file2
file3
file4
file5
file:1
file:2
file:3
file:4
file:5

sent 573 bytes  received 209 bytes  1,564.00 bytes/sec
total size is 0  speedup is 0.00

Связанный контент