3

Я перевожу кучу файлов между Windows и системой Linux. Поскольку не все Windows заботятся о случае, некоторые файлы в системе Windows больше не имеют такой же корпус, как в системе Linux. Но rsync теперь обрабатывает эти файлы как разные и загружает новую копию.

Возможно ли, чтобы rsync проигнорировал этот случай?

4 ответа4

3

Обычно Windows игнорирует регистр, но сохраняет его. Если ваши имена файлов меняют регистр, это должно быть связано с какой-то программой, отличной от rsync, которая скопировала файлы и исказила регистр во время копирования. Эта программа, вероятно, неправильно настроена. Или, если вы используете сервер Samba, возможно, он неправильно настроен. По умолчанию Samba также сохраняет регистр имен файлов.

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

Тогда вам остается « только » проблема чувствительности к регистру фильтров. Если это заканчивается вашим случаем, и вы не хотите применять патч, предложенный Wim, вы можете использовать классы символов в фильтрах.

Это уродливо и раздражает, но работает

--exclude="[Tt][Ee][Mm][Pp]/"

или в файле фильтра:

- Temp/
- temp/
- TEMP/

или более общий, но нечитаемый:

- [Tt][Ee][Mm][Pp]/ 

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

perl -i.bak -pe 's/([a-z])/[\U$1\E$1]/g' your_rsync-filter.txt

И преобразовать его обратно в удобочитаемую форму с

perl -i.bak  -pe 's/ \[ [A-Z] ([a-z]) \] /$1/xg' your_rsync-filter.txt

(Опция -i.bak создает резервную копию и преобразует файл на месте, а не в стандартный вывод)

По крайней мере, для фильтров и опций include/exclude было бы неплохо иметь в rsync флаг без учета регистра. До тех пор, кажется, единственными вариантами являются либо патч, либо извилистый синтаксис, похожий на регулярные выражения.

2

Rsync имеет то, что они называют "поддерживаемым патчем", который добавляет --ignore-case . Для этого вам нужно скомпилировать rsync из исходного кода и применить ignore-case.patch . Вам нужна исправленная версия rsync как на локальной, так и на удаленной стороне.

2

Вы можете попробовать использовать систему нечеткого сопоставления rsync:

-у, - нечеткий

Эта опция сообщает rsync, что он должен искать базовый файл для любого файла назначения, который отсутствует. Текущий алгоритм ищет в том же каталоге, что и файл назначения, либо для файла с идентичным размером и временем изменения, либо для файла с аналогичным именем. Если найдено, rsync использует нечеткий базовый файл, чтобы попытаться ускорить передачу.

Обратите внимание, что использование параметра --delete может избавить от любых потенциальных файлов с нечетким соответствием, поэтому либо используйте --delete-after, либо укажите некоторые исключения из имен файлов, если вам нужно это предотвратить.

1

Нет конкретной опции, чтобы сделать rsync нечувствительным к регистру. Хотя NTFS сохраняет дело, поэтому у вас не должно быть особых проблем с ним. С другой стороны, файловые системы FAT имеют больше проблем с rsync, и такой комбинации следует избегать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .