У меня есть довольно большой каталог, который мне нужно синхронизировать с внешним жестким диском как для резервного копирования, так и для портативности.
/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